我有一个类,ClassX
为了这个问题的目的而调用,声明如下:
class X
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
如果我有这些类的两个实例(instanceOne
和instanceTwo
),List<T>
我怎样才能找到两个实例中相同的元素:
假设 instanceOne 中有两个元素,instanceTwo 中有四个元素。在每个实例中,其中两个元素是相同的(由它们具有相同的 Guid Id 的事实定义)
我认为我应该能够以我的方式进行 LINQ,但这不是为我做的
// What's common to the two instances?
var commonElements = (
from a in instanceTwo
join b in instanceOne on a.Id equals b.Id
select b).ToList();
// What's not in instanceOne and in instanceTwo?
var notInInstanceOne = instanceTwo.Except(commonElements)
在这种情况下instanceTwo
是一个超集,instanceOne
但情况可能并非总是如此,因此我应该能够翻转原始 LINQ 语句以获取instanceOne
不在instanceTwo
即的元素:
var notInInstanceTwo = instanceOne.Except(commonElements)
令人沮丧的是,原来的 LINQ 语句(我试图确定共同元素)不起作用,谁能发现我做错了什么?
编辑 2012-06-08 11:00 UTC
根据@Nikhil Agrawal 和@Trust me - 我是一名医生,我使用了 Intersect 方法,但这不会产生预期的结果:
var commonItems = instanceTwo.Intersect(instanceOne); // Returns nothing
var itemsInTwoNotOne= instanceTwo.Except(instanceOne); // Returns everything in instanceTwo
FWIW 我对 Equals() 方法的实现是:
public bool Equals(Guid x, Guid y)
{
if (x == y)
{
return true;
}
return false;
}