筛选多个列表值

时间:2018-09-28 16:55:45

标签: c# list linq

我有一个包含元素列表的主列表。我想根据两个过滤条件从列表中过滤掉一些记录。我想根据域和组织进行过滤,如下所示。没有foreach循环,可以在mainLst上完成此比较吗?

domains = "ABC/XYZ,RTG,YUT,WED"; //Comma seperated values
orgs = "FA,TR,WE,QW,ER"; // Comma seperated values
MainLst contains single domain and org for each record.

var mainLst = MasterData();
var filterDomain = lst.Where(c => c.domain == domains && c.orgs == orgs).ToList();     

2 个答案:

答案 0 :(得分:4)

类似的事情应该起作用:

mainLst.Where(c => domains.Split(',').Contains(c.domain) && 
                   orgs.Split(',').Contains(c.org)).ToList(); 

这将按','划分域和组织,得到2个可以在过滤器中使用的列表。

然后,LINQ查询针对mainLst中的每个项目检查域组织是否包含在这些列表中,并根据需要应用两个过滤器。

答案 1 :(得分:0)

使用Split方法拆分列表,然后使用LINQ来获取匹配的记录。

        var domains = "ABC/XYZ,RTG,YUT,WED"; //Comma seperated values
        var orgs = "FA,TR,WE,QW,ER";

        var domainArray = domains.Split(',');
        var orgsArray = orgs.Split(',');

        var mainLst = new List<MasterData>();
        var filterDomain = from md in mainLst
                           join dm in domainArray on md.Domain equals dm
                           join or in orgsArray on md.Organization equals or
                           select md;