EntityFramework .net 6 获取提供列表中的对象

问题描述 投票:0回答:1

我有用作过滤器的对象列表:

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 表进行内部联接。

c# .net linq
1个回答
0
投票

尝试在where子句之前添加AsEnumerable()或ToList()。但它会先将 MyObjects 表中的所有数据检索到内存中,然后再按

LINQ
进行过滤。如果 MyObjects 表中有大量数据,这种方法通常效率较低。

var result = context.MyObjects.AsEnumerable().Where(o => filters.Any(f => f.id == o.id && f.myDate == o.myDate));
© www.soinside.com 2019 - 2024. All rights reserved.