C#Linq where子句.Contains(string []) [英] C# Linq where clause .Contains(string[])
问题描述
在过去的几个小时里,我一直在搜寻以找到解决我的问题的方法,但是我很困惑. 我想知道是否有人可以帮助我解决以下问题.
Ive been googling for the last few hours to find a solution to my problem but im stumpped. I was wondering if someone could help me out with the following.
我有一个Linq查询,它查询一个DataTable.我有一个string [] BodyTypes参数,其中包含诸如"5,7,11"或"6,7,4"或仅"5"之类的字符串.
I have a Linq query that queries against a DataTable. I have a param of string[] BodyTypes that holds strings like "5,7,11" or "6,7,4" or just "5,"
我拥有的Linq是:
var query2 = (from v in query.AsEnumerable()
where (from yy in BodyTypes
select yy).Contains(v.Header36.ToString())
select new
{
PartNumber = v.PartNumber,
Position = v.Position,
ImagePath = v.ImagePath,
Supplier = v.Supplier,
Price = v.Price,
RRP = v.RRP,
Stock = v.Stock,
BaseCat = v.BaseCat,
Description = v.Description,
Header36 = v.Header36,
GT_Id = v.GT_Id
});
v.Header36每行分配了不同的值,即"11,7,4,5"或"11,6,7"
v.Header36 has different values assigned to it per row i.e. "11,7,4,5" or "11,6,7"
我的问题是我如何使用Linq进行匹配,我想将Header36与在string [] BodyTypes数组中传递的任何内容进行匹配,例如使用通配符或like语句. 我的问题还在于,该DataTable是从第3方的Web服务加载的,因此此处无法使用任何SQL后端. 任何建议将不胜感激.
My problem is how do i make a match using Linq, i want to match Header36 with anything that is passed in the string[]BodyTypes array like using a wild card or like statement. My problem is also this DataTable is loaded from a 3rd party's webservice, so no SQL backend can be used here. Any suggestions would be greatfully appreciated.
亲切问候 尼尔
推荐答案
使LINQ成为对象实际上意味着更容易回答.我想您想要类似的东西:
Making it LINQ to Objects actually means it's easier to answer. I think you want something like:
from v in query.AsEnumerable()
let headers = v.Header36.Split(',')
where yy.BodyTypes.Intersect(headers).Any()
select new [...]
请注意,您的(from yy in BodyTypes select yy)
主要是 等同于BodyTypes
(至少会给出您使用它的方式)-您不需要使用查询每当您想做任何事情时都要表达.
Note that your (from yy in BodyTypes select yy)
is mostly equivalent to just BodyTypes
(at least it will be given the way you're then using it) - you don't need to use a query expression every time you want to do anything.
这是效率更高的版本:
HashSet<String> bodyTypes = new HashSet<String>(yy.BodyTypes);
var query = from v in query.AsEnumerable()
let headers = v.Header36.Split(',')
where bodyTypes.Overlaps(headers)
select new [...]
这篇关于C#Linq where子句.Contains(string [])的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!