Linq 到实体,匹配值包含一个或多个字符串的位置
本文关键字:字符串 位置 包含一 实体 Linq | 更新日期: 2023-09-27 18:37:08
我有一个数据集,我需要过滤一个字符串值。如果属性包含特定字符串,则会选择该项。那工作正常
我需要更改它以允许字符串列表进行测试
我可以迭代对象并循环访问所选值,将匹配项存储在单独的列表中,但觉得应该有更好的方法。
希望有人有一个关于如何完成这一点的好例子
//Gets a set of addresses, objects have several properties, one of them beeing (example):
// o.ZipCity ="1000 Copenhagen"
List<AddresObjectType> result = getAllAddresses();
// Example : 1000,2000
var listOfZip = context.Request["zip"].Split(Convert.ToChar(","));
//Current code, just one value
result = result.Where(t => t.ZipCity.Contains(context.Request["zip"])).ToList();
//Code I need...
//IF any of the passed values are matched then include
result = result.Where(t => t.ZipCity.Contains(listOfZip)).ToList();
如此渴望的效果:- 请求的值"1000,2000,3000"(一对多值)- 结果集包括具有至少一个值的 ZipCity 值的所有内容
你可以试试这个:
result = result.Where(t => listofZip.Contains(t.ZipCity)).ToList();
listOfZip
将包含 1000、2000、3000 的值,您尝试获取 zip 是其中之一的所有城市。
更新
result = result.Where(t => listofZip.Any(zip=>t.ZipCity.Contains(zip)).ToList();
如果 listofZip 中有任何元素满足谓词,则 Any
扩展方法返回 true:
zip=>t.ZipCity.Contains(zip)
如果没有,则为 false。
谓词检查什么?
它检查当前 zip 是否包含在 ZipCity 中。如果是这样,则返回 true。否则,它将返回 false。