C#Linq where子句.Contains(string []) [英] C# Linq where clause .Contains(string[])

查看:364
本文介绍了C#Linq where子句.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆