Lambda连接字符串列表C#

时间:2016-08-16 05:27:15

标签: c# linq lambda

我试图从两个列表中获取常见电子邮件。但我的查询永远不会返回任何值。

List<string> list1=new List<string>();
list1.Add("abc@gmail.com");
list1.Add("abc@hotmail.com");

List<string> list2=new List<string>();
list2.Add("abc@gmail.com");

var tempList = list1.Join(list2, x => x, y=> y, (x,y) => x).Select(x => x);

但是当我将列表更改为对象类型时,它的开始返回结果。

List<Email> list1=new List<Email>();
list1.Add(new Email {Address = "abc@gmail.com"});
list1.Add(new Email {Address = "abc@hotmail.com"});

List<Email> list2=new List<Email>();
list2.Add(new Email {Address = "abc@hotmail.com"});
var tempList = list1.Join(list2, x => x.Address, y=> y.Address, (x,y) => x).Select(x => x);

现在此查询返回结果。 我在这里做错了什么?或者还有其他一些我不知道的行为。以下linq表达式也正常。

 var result2 = from item1 in list1
               join item2 in list2
               on item1 equals item2
               select new { item1 };

2 个答案:

答案 0 :(得分:1)

当我看到您的代码工作正常时,您可能只是忘记调用ToList()来查看结果。

enter image description here

答案 1 :(得分:-1)

只需使用交叉

var tempList = list1.Intersect(list2);

我无法复制您的初始问题。它给了我与此解决方案完全相同的响应。