如何解决LINQ两个Where子句
有人知道我如何链接我的where子句吗?
我想用第二个结果中找到的项目过滤主列表中的项目。
我有以下示例代码
@foreach (var artikel in Controller.Artikel
.Where(x => x.LieferantenArtikel
.Where(y => y.Lieferant.LieferantId == bestellung.LieferantId)
)
{
<option value="@artikel.Artikelnummer">@artikel.Artikelnummer</option>
}
第一个.Where
仅用于访问对象列表,该列表具有我所需的真实检查。
解决方法
您将.Where()
链接到.Where()
的方式在技术上是正确的。问题在于,当前情况下的外部.Where()
不能评估为布尔值。但是,这是必需的。 .Where()
的目的是为集合定义一个过滤器,以产生该集合的子集。您可以检查.Any()
项目是否满足该条件:
@foreach (var artikel in Controller.Artikel
.Where(x => x.LieferantenArtikel
.Any(y => y.Lieferant.LieferantId == bestellung.LieferantId))
)
{
<option value="@artikel.Artikelnummer">@artikel.Artikelnummer</option>
}
。
,为其他答案添加更多背景信息,希望可以帮助您了解如何有效使用LINQ:
您尝试使用.Where()
进行编程的内容在技术上是“存在”。天真地翻译成LINQ,应该是
Controller.Artikel
.Where(x =>
x.LieferantenArtikel
.Where(y => y.Lieferant.LieferantId == bestellung.LieferantId)
.Count() > 0 // naive "exists",but bad; for reasons see below
)
.Count() > 0
效率很低,因为这将需要执行.Count()
来评估语句,进而需要确定准确的结果集。
这是.Any()
介入的地方:它仅通过检查IEnumerable
并在第一项匹配时立即返回true
来确定[r]
library(tidyverse)
require(xlsx)
read_xlsx("Churn.xlsx")
df <-read_xlsx("Churn.xlsx")
中是否至少有一个元素。因此,只有在没有匹配项的情况下,才必须枚举并检查“ LieferantenArtikel”的所有项目,否则将使用较小的子集。
我发现非嵌套的LINQ更具可读性。使用SelectMany
将内容弄平,然后使用Where
。请注意,您需要确保在Equals()
中实现了Artikel
,以便Distinct()
正常工作。
var artikels = Controller.Artikel
.SelectMany(x => x.LieferantenArtikel,(x,l) => (Artikel: x,Lieferant: l))
.Where(x => x.Lieferant.LieferantId == bestellung.LieferantId)
.Select(x => x.Artikel)
.Distinct();
@foreach(var artikel in artikels)
{
<option value="@artikel.Artikelnummer">@artikel.Artikelnummer</option>
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。