方法x没有支持的SQL转换

我想编写一个查询,该查询应该获取用户对象以及用户已经发布的消息量。 我这样做的方式如下:

var query = (from u in _db.Repository() where u.IsDeleted != true select new UserWithMessagecount() { User = u MessageCount = GetUserMessageCount(u.Documents).Count(), }); 

我正在使用一种方法,因为有些消息应该被过滤掉(以动态的方式)

为了简单起见,我将发布函数而不排序逻辑(仍会产生相同的错误)。

  private EntitySet GetUserMessageCount(EntitySet set) { return set; } 

返回的错误是:

方法’x’没有支持的SQL转换。

有关如何解决此问题的任何想法?

请改用此语法:

  var query = (from u in _db.Repository() let MessageCount = GetUserMessageCount(u.Documents).Count() where u.IsDeleted != true select new UserWithMessagecount() { User = u, MessageCount = MessageCount }); 

Linq-to-SQL将尝试将您的整个语句转换为SQL,当然没有GetUserMessageCount()可用。

您需要通过枚举来获取SQL查询的结果 – 然后应用C#端逻辑。

您需要做的是在投影中使用分组。

 var query = from u in _db.Repository() where !u.IsDeleted group u by u.UserId into g select new UserWithMessageCount { User = g.First(x => x.UserId == g.Key), MessageCount = g.Sum(x => x.Messages.Count()) } 

这应该工作。