【问题标题】:How can i search partial part of a field using a list in LINQ?如何使用 LINQ 中的列表搜索字段的部分部分?
【发布时间】:2014-05-08 12:58:14
【问题描述】:

我有一个来自像

这样的名字的列表
 List<string> PartialOrganism = new List<string>{ "Arabidopsis", "Elsholtzia", "Elymus", "Oryza sativa" };

还有一个完整的字段,Table.Organism 一些值,例如:

“Elymus elongatum” "Oryza sativa (大米)" “拟南芥”

我怎么会有这样的查询,

Var query =from c in Table where c.Organism.Contains(PartialOrganism) select c;

非常感谢。

【问题讨论】:

  • 能否请您更详细地说明您想要获得的内容。提供一个示例(输入/输出)将非常有益。谢谢
  • 您想查找 Organism 字段是否包含列表中的任何项目?
  • 非常接近c.Organism.Where(org =&gt; PartialOrganism.Any(org.Contains))
  • 请看这个例子var query=from c in Table.Organism where c.Organism.Contains("Arabidopsis") select c;

标签: c# linq list


【解决方案1】:

如果我对问题的理解正确,您可能需要如下所示的查询:

var query = from c in Table
where PartialOrganism.Any(po => c.Organism.Contains(po))
select c;

这个查询是说:如果 PartialOrganism 包含任何作为 c.Organism 的子字符串的字符串元素,则在 Table 中找到我们所有记录。

【讨论】:

  • 非常感谢@Drew,但它显示错误Local sequence cannot be used in LINQ to SQL implementation of query operator except the Contains() operator。
【解决方案2】:

我认为您正在寻找所有部分有机体。您必须将查询包装在一个循环中。

如下所示,matchingOrganisms 是您可以附加到的对象。

foreach (string organism in PartialOrganisms)
    {
       matchingOrganisms =  (from c in Table where c.Organism.Contains(organism) select c);
    }

这里有一个更详尽的例子。声明一个列表(这也可以是自定义对象的列表等)

List<object> rows = new List<object>();

然后将每个查询的结果添加到列表中:

foreach (string organism in PartialOrganisms)
    {
       rows.AddRange((from c in Table where c.Organism.Contains(organism) select c).ToList());
    }

这将充当或。

【讨论】:

  • 它说,在每个 Foreach 步骤 AND 查询 vi 下一个 Foreach 步骤,但我需要与列表条目 OR 一起比较,你能帮帮我吗。
  • 这将与 or 相同,关键是每次循环迭代都附加到 matchingOrganisms。类似于:matchingOrganisms.AddRange(...) 然后添加然后循环结束,您将获得所有匹配项。
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
相关资源
最近更新 更多