我有两个像这样的扩展方法
public static IQueryable<T> CurrentVersion(this IQueryable<T> queryable, DateTime date)
{
return queryable.Where(p => p.CreationDate>date);
}
public static IEnumerable<T> CurrentVersion(this IEnumerable<T> queryable, DateTime date)
{
return queryable.Where(p => p.CreationDate>date);
}
我的模型是
public class Group {
..
ICollection<GroupMembers> GroupMembers { get; set; }
}
当我在这个查询中使用扩展方法时,一切都正常。
var q = Db.Groups.CurrentVersion();
var result = q.ToList();
但是当我在连续的查询中使用它时,会出现错误
var q = Db.Groups.SelectMany(p => p.GroupMembers.AsQueryable().CurrentVersion(date));
OR
var q = Db.Groups.SelectMany(p => p.GroupMembers.AsEnumerable().CurrentVersion(date));
var result = q.ToList(); // Here I get error
错误:
LINQ to Entities不认识'System.Linq.IQueryable
1[..](System.Linq.IQueryable
1[..., System.DateTime)'方法,这个方法无法被转换成存储表达式。
现在我有两个问题:
我在谷歌上搜索了这个错误,并在stackoverflow上找到了很多与我的问题相同的答案。所有答案都是“Linq to Entities不能将此扩展方法转换为SQL查询”。现在,如果有人能帮我知道,为什么我的第一个查询没有引发任何错误,我将非常感激。
如何更改我的扩展方法以便Linq-to-Entities能够识别它?