根据另一个列表中的内容在一个列表中查找元素

时间:2015-03-09 12:04:32

标签: c# linq

如何使用LINQ从一个列表中获取基于另一个列表的元素。我有两个列表:List lstA和List lstB

伪声明:

public class A
{
string strTag;
int iCounter;
string strInfo;
}

public class B
{
string strTag;
int iIndex;
DateTime? dtTimeStamp;
string strCustomerID,
string strCustomerName;
}

两个列表都包含strTag元素。我想从lstB收集元素,其中strTag元素包含在lstA中。

我在考虑像

这样的东西
var newList = 
from t in lstB 
join s in lstA on t.strTag equals s.strTag into TempData
from r in TempData select r;

澄清:lstB包含数千条记录,lstA包含1-25条记录。我需要来自lstB的1-25条记录,其中strTag与lstA中记录中的strTag匹配

5 个答案:

答案 0 :(得分:1)

我使用匿名类型实现它:

var newList = from t in lstB
              join s in lstA on t.strTag equals s.strTag 
              select new {B = t, A = s};

答案 1 :(得分:0)

Where()Contains()的组合应该可以解决问题:

var listA = new[]{"1", "2", "3"}.Select(s => new A{strTag = s});

var r = new Random();

//list of 100 items containing random values between "1" and "100" for strTag 
var listB = Enumerable.Range(1,100).Select(i => new B{ strTag =r.Next(1,11).ToString()});

var filtered = listB.Where(b => listA.Select(a => a.strTag).Contains(b.strTag));

答案 2 :(得分:0)

您必须在列表中获取strTag并使用Contains过滤掉匹配的记录。试试这样的事情,

        List<A> lstA = new List<A>();
        List<B> lstB = new List<B>();
        List<string> strTagsinA = lstA.Select(x => x.strTag).ToList();

        var result = (from b in lstB
                 where strTagsinA.Contains(b.strTag)
                 select b).ToList();

答案 3 :(得分:0)

实际上加入列表没有任何问题。问题是在其中一个列表中,在strTag的末尾插入了一个空白字符。

感谢您的建议。我已经尝试了很多,当删除空白字符时,它也会给出正确的结果。

答案 4 :(得分:0)

试试这个

lstA.Join(lstB, a => a.strTag, b => b.strTag, (a, b) => b);