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 值的所有内容

Linq 到实体,匹配值包含一个或多个字符串的位置

你可以试试这个:

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。