我正在尝试获取所有数据等于(1或2)且数据等于(6 OR 7)的项目
var oneFromEachList = new[] {
new[] {1,2}, // 1 OR 2
new[] {6,7}, // AND 6 OR 7
};
// item.dataList is an IEnumerable<int>
DbSet<Table>.Where(item => oneFromEachList.All(list => item.dataList.Any(list.Contains)))
这个查询是我想要做的,但它无法转换为SQL,我得到:“不支持嵌套查询。操作1 ='案例'操作2 ='收集'”
请注意,oneFromEachList对象在执行查询之前是已知的(它不是来自数据库)。我想通过编写.Where语句来构建一个Expression是可能的吗?虽然这看起来很复杂......
答案 0 :(得分:1)
我认为这就是你的目标:
var query = DbSet<Table>()
foreach(var list in oneFromEachList)
query = query.Where(item => item.dataList.Any(list.Contains));
您可以使用Aggregate()
:
oneFromEachList.Aggregate(DbSet<Table>(), (q, l) => q.Where(item => item.dataList.Any(l.Contains)));
但无论如何,如果不编写多个Where
子句或进行一些手动表达构建,您将无法完成您正在寻找的内容。