Linq to Entities,匹配值包含一个或多个字符串的位置
Linq to Entities, match where value contains one or more strings
我有一个数据集需要根据字符串值进行过滤。如果 属性 包含特定字符串,则选择该项目。效果不错
我需要更改它以允许对字符串列表进行测试
我可以迭代对象并循环遍历选定的值,将匹配项存储在单独的列表中,但觉得应该有更好的方法。
希望有人有一个很好的例子来说明如何完成这个
//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,您尝试获取其邮政编码为其中之一的所有城市。
更新
result = result.Where(t => listofZip.Any(zip=>t.ZipCity.Contains(zip)).ToList();
Any
扩展方法 return 如果 listofZip 中有满足谓词的任何元素则为真:
zip=>t.ZipCity.Contains(zip)
如果没有则返回 false。
谓词检查什么?
它检查当前的 zip 是否包含在 ZipCity 中。如果是这样 return 是真的。否则,它 return 是错误的。
我有一个数据集需要根据字符串值进行过滤。如果 属性 包含特定字符串,则选择该项目。效果不错
我需要更改它以允许对字符串列表进行测试
我可以迭代对象并循环遍历选定的值,将匹配项存储在单独的列表中,但觉得应该有更好的方法。
希望有人有一个很好的例子来说明如何完成这个
//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,您尝试获取其邮政编码为其中之一的所有城市。
更新
result = result.Where(t => listofZip.Any(zip=>t.ZipCity.Contains(zip)).ToList();
Any
扩展方法 return 如果 listofZip 中有满足谓词的任何元素则为真:
zip=>t.ZipCity.Contains(zip)
如果没有则返回 false。
谓词检查什么?
它检查当前的 zip 是否包含在 ZipCity 中。如果是这样 return 是真的。否则,它 return 是错误的。