Linq “Lambda表达式”;不在「;C#4.0
我创建这个类是为了测试。 我想比较一下类的列表,得到ListA和ListB之间不同的类。在我的示例中,结果仅获取ListB类 我对字符串列表做同样的精简,并对其进行处理 课堂示例Linq “Lambda表达式”;不在「;C#4.0,linq,entity-framework,c#-4.0,Linq,Entity Framework,C# 4.0,我创建这个类是为了测试。 我想比较一下类的列表,得到ListA和ListB之间不同的类。在我的示例中,结果仅获取ListB类 我对字符串列表做同样的精简,并对其进行处理 课堂示例 public class FileNode { public string Source { get; set; } public int Id { get; set; } } List<FileNode> ListA = new List<FileNode> { ne
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();
公共类文件节点
{
公共字符串源{get;set;}
公共int Id{get;set;}
}
List ListA=新列表
{
新文件节点{Id=1,Source=“a”},
新文件节点{Id=2,Source=“b”},
};
列表b=新列表
{
新文件节点{Id=1,Source=“a”},
新文件节点{Id=2,Source=“b”},
新文件节点{Id=3,Source=“c”},
};
List ListAB=ListB.Where(m=>!ListA.Contains(m)).ToList();
字符串示例,它是works
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();
List a=新列表{“a”、“b”、“c”、“d”、“e”};
列表b=新列表{“a”、“b”、“c”、“d”};
列表ab=a.Where(m=>!b.Contains(m)).ToList();
那么Contains
将调用元素上的Equals
,并且还可能使用GetHashCode
(我怀疑它,但无论如何都应该一致重写它)。因此,您需要在FileNode
中重写Equals(object)
和GetHashCode()
。(默认情况下,您将获得引用相等。)
请注意,一旦开始尝试在将在数据库中执行的查询中使用
Contains
,它的行为可能完全不同-它不会在此时查看Equals
/GetHashCode
方法。那么Contains
将在元素上调用Equals
,也可能使用GetHashCode
(我怀疑它,但无论如何你都应该一致地重写它)。因此,您需要在FileNode
中重写Equals(object)
和GetHashCode()
。(默认情况下,您将获得引用相等。)
请注意,一旦您开始尝试在将在数据库中执行的查询中使用
Contains
,它的行为可能会完全不同-此时它不会查看您的Equals
/GetHashCode
方法。尽管有标记,您没有在代码中的任何地方使用实体框架-如果您开始使用EF,它的行为可能会完全不同。尽管有标记,但您没有在代码中的任何地方使用实体框架-如果您开始使用EF,它的行为可能会完全不同。