我有用作过滤器的对象列表:
public class Filter {
public int id {get; set;};
public DateTime myDate {get; set};
}
List<Filter> filters ...
我有一个存储库,我想查询如下:
var result = context.MyObjects.Where(o => filters.Contains(new Filter (){id = o.id, myDate = o.myDate});
但是它不起作用,它抱怨它无法转换为sql查询,可能是因为Contains使用复杂对象(Filter)而不是int或guid。
有什么办法可以解决吗?我怎样才能执行这样的查询?基本上我需要使用内存中的过滤器列表对 sql 表进行内部联接。
尝试在where子句之前添加AsEnumerable()或ToList()。但它会先将 MyObjects 表中的所有数据检索到内存中,然后再按
LINQ
进行过滤。如果 MyObjects 表中有大量数据,这种方法通常效率较低。
var result = context.MyObjects.AsEnumerable().Where(o => filters.Any(f => f.id == o.id && f.myDate == o.myDate));