2013-01-22 89 views
0

我爲測試創建此類。 我想比較List類和ListA和ListB之間的不同類。在我的例子中,結果只獲得ListB的類。Lambda Expression「NOT IN」C#4.0

我做同樣的細跟的字符串列表和工作,它

類示例

public class FileNode 
{ 
    public string Source { get; set; } 
    public int Id { get; set; } 
} 

List<FileNode> ListA = new List<FileNode> 
{ 
    new FileNode{ Id = 1, Source="a" }, 
    new FileNode{ Id = 2, Source="b" }, 
}; 

List<FileNode> ListB = new List<FileNode> 
{ 
    new FileNode{ Id = 1, Source="a" }, 
    new FileNode{ Id = 2, Source="b" }, 
    new FileNode{ Id = 3, Source="c" }, 
}; 
List<FileNode> ListAB = ListB.Where(m => !ListA.Contains(m)).ToList(); 

字符串例子,它的工作原理

List<string> a = new List<string> {"a","b","c","d","e" }; 
List<string> b = new List<string> {"a","b","c","d" }; 
List<string> ab = a.Where(m => !b.Contains(m)).ToList(); 
+1

儘管存在您的代碼,但您並未在該代碼中的任何位置使用實體框架,並且如果您開始使用EF,它的行爲可能完全不同。 –

回答

4

Contains打算請致電Equals關於元素 - 也可能使用GetHashCode(我懷疑它,但你應該覆蓋它一貫無論如何)。因此,您需要覆蓋FileNode中的Equals(object)GetHashCode()。 (默認情況下,您將獲得引用相等性。)

請注意,只要您開始嘗試在數據庫中執行的查詢中使用Contains,它可能會表現完全不同 - 它不會查看您的Equals/GetHashCode方法。