gpt4 book ai didi

linq - 如何创建一个必须满足两个值的谓词,其中一个是值列表?

转载 作者:行者123 更新时间:2023-12-02 03:50:51 24 4
gpt4 key购买 nike

使用以下代码如何获得包含任何邮政编码列表但仅包含街道地址目的记录的返回?这当前会返回邮政编码或街道地址的匹配项。

var zipPredicate = PredicateBuilder.False<NameAddress>();
List<string> zips = new List<string>();
zips.Add("90210");
zips.Add("90211");
foreach (var item in zips)
{
zipPredicate = zipPredicate.Or(n=> n.ZIP.Contains(item));
}
zipPredicate = zipPredicate.And(n=> n.Purpose=="Street Address");
var zipResult = from s in NameAddresses
.AsExpandable()
.Where(zipPredicate)
select new{s.ID, s.ZIP, s.Purpose};

zipResult.Dump();

最佳答案

我想你要找的是:

var zipPredicate = PredicateBuilder.False<NameAddress>();
List<string> zips = new List<string>();
zips.Add("90210");
zips.Add("90211");
foreach (var item in zips)
{
zipPredicate = zipPredicate.Or(n=> n.ZIP.Contains(item) && n.Purpose=="Street Address");
}
var zipResult = from s in NameAddresses
.AsExpandable()
.Where(zipPredicate)
select new{s.ID, s.ZIP, s.Purpose};

zipResult.Dump();

编辑

还有一件事,如果你想放弃构建谓词,你应该能够做类似的事情:.Where(n=>zips.Contains(n.ZIP) && n.Purpose= ="街道地址") 重要的一点是您的实体属性组件位于 .Contains() 中。这会将您的代码缩短为:

    List<string> zips = new List<string>();
zips.Add("90210");
zips.Add("90211");

var zipResult = from s in NameAddresses
.AsExpandable()
.Where(n=>zips.Contains(n.ZIP) && n.Purpose=="Street Address")
select new{s.ID, s.ZIP, s.Purpose};

zipResult.Dump();

我更喜欢它的可读性。我希望最终执行的查询是相同的。

关于linq - 如何创建一个必须满足两个值的谓词,其中一个是值列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com