【问题标题】:Nested Lists in LINQ to SQLLINQ to SQL 中的嵌套列表
【发布时间】:2015-10-24 00:40:58
【问题描述】:

我正在尝试获取数据等于 (1 OR 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,我得到:“不支持嵌套查询。Operation1='Case' Operation2='Collect'”

请注意,oneFromEachList 对象在执行查询之前是已知的(它不是来自数据库)。我想可以通过编写 .Where 语句来构建表达式?不过,这似乎很复杂......

【问题讨论】:

标签: c# linq


【解决方案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 子句或进行一些手动表达式构建,您将无法完成您正在寻找的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多