Lambda 表达式 "NOT IN" C# 4.0



我为测试创建这个类。我想与类的列表进行比较,并在列表 A 和列表 B 之间获得不同的类。在我的示例中,结果仅获得 ListB 类。

我对字符串列表做同样的薄并工作

类示例

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();
好吧,

Contains将在元素上调用Equals - 并且也可能使用GetHashCode(我对此表示怀疑,但无论如何您都应该始终如一地覆盖它)。所以你需要覆盖Equals(object)并在FileNodeGetHashCode().(默认情况下,你将获得引用相等性。

请注意,一旦您开始尝试在将在数据库中执行的查询中使用Contains,它的行为可能会完全不同 - 此时它不会查看您的Equals/GetHashCode方法。

相关内容

  • 没有找到相关文章

最新更新