Linq to Entities,匹配值包含一个或多个字符串的位置

时间:2015-01-12 10:19:32

标签: c# linq entity-framework filtering

我有一个数据集,我需要过滤字符串值。如果属性包含特定字符串,则选择该项。这很好用

我需要更改此项以允许对字符串列表进行测试

我可以迭代对象并遍历选定的值,将匹配存储在单独的列表中,但感觉应该有更好的方法。

希望有人有一个很好的例子来说明如何实现这个

//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();

SO desiered effect: - 请求值“1000,2000,3000”(一对多值) - 结果集包括具有至少包含其中一个值的ZipCity值的所有值

1 个答案:

答案 0 :(得分:2)

你可以尝试这个:

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)

如果没有,则为假。

谓词检查什么?

它检查当前的zip是否包含在ZipCity中。如果是,则返回true。否则,它返回false。