【问题标题】:Linq query run over list of parametersLinq 查询运行参数列表
【发布时间】:2012-07-06 22:37:42
【问题描述】:

我需要创建一个 linq 查询,该查询从某个功能结果为真的数据库表中选择数据。

我正在使用linq-to-sql,该函数运行良好,我可以编写一个基本查询来获取数据。

我的问题是我有一个内存中的参数列表,我基本上需要多次运行 linq 查询(每个参数列表项一次)并聚合结果。

我尝试使用.Any() 作为连接,但 linq 不喜欢将非数据库结果集与数据库结果集连接。

一些示例代码:

Parameter list: // lets call it "l"
{    
 One,
 Two,
 Three
}

查询

From w in words where funcWord(l.item) == true select w;

所以我需要一个查询,它可以为 l 中的每个项目运行一次上述查询并聚合结果。

感谢任何帮助。

谢谢。

【问题讨论】:

  • 您当前的查询没有任何意义 - funcWord(l.item)w 的依赖关系是什么? funcWord 是什么?
  • 抱歉含糊其辞。这个查询只是为了提供一个例子,并且是我能放在一起的最快的例子。澄清 funcWord 是一个 sql 函数,它根据某些条件返回标量值 true / false。代码应为 funcWord(l.item, w.name)。

标签: c# .net linq


【解决方案1】:

多个from 语句将遍历每个组合,有点像嵌套的foreach 语句:

from item in list
from w in words
where funcWord(item, w.name) == true
select w;

有趣的是,这被翻译成类似于 Arithmomaniac 的答案的 SelectMany 语句。

【讨论】:

  • 感谢风险马丁。这就是我最初接近它的方式,但 linq 不喜欢我尝试加入数据库表和非数据库表。这对你有用吗?
  • @narudnarud 我承认我对 LINQ to SQL 了解不多。但现在我很好奇为什么这个解决方案不起作用。它被翻译成SelectMany 语句,而不是Join 语句。你确定你没有使用join 关键字吗?
【解决方案2】:

试试SelectMany,它聚合了一个应用于每个成员的一对多函数的结果。

在这种情况下,成员是list 的元素,一对多的函数是你上面的,l-dependent 查询(尽管我将它重写为 lambda 函数。)

list.SelectMany(l => words.Where(w => funcWord(l.item, w.name)));

【讨论】:

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