比较 Linq C# 中的两个不相关的实体集合



我想使用 linq 比较两个不相关的实体。

例如 -

实体 A

Id         Name            
1          A              
2          B               
3          C
4          D

实体 B

Id         Name
1          B
2          C

我应该得到的结果

A, D

从上面的两个集合中,我想使用 Name 属性将实体 B 与实体 A 进行比较,并找出实体 B 中不可用的记录。

任何帮助都将通过一些示例代码不胜感激。

问候

可以使用 LINQ 的Except扩展方法。引用自 MSDN 文档...

通过使用默认相等比较器比较值来生成两个序列的集合差值。

示例代码

int[] a = { 1, 2, 3, 4, 5 };
int[] b = { 4,5,6,7 };
var c = a.Except(b);

结果

1,2,3

注意

由于您正在使用自定义对象(类),因此您需要实现一个相等比较器,该比较器通过 Name 属性比较项。自定义相等比较器示例...

public class CustomComparer : IEqualityComparer<CustomObject>
{
    public bool Equals(CustomObject x, CustomObject y)
    {
        return x.Name.Equals(y);
    }
    public int GetHashCode(CustomObject obj)
    {
        return obj.Name.GetHashCode();
    }
}

然后,您可以在Except扩展方法的重载中使用此自定义相等比较器,假设ab属于 CustomObject 类型...

var c = a.Except(b, new CustomComparer());

优点是可重用性,特别是当您在整个项目中传播此调用以Except时。然后,如果您需要更改实体(自定义对象),您只需在自定义相等比较器中进行更改

var result = entityAs.Where(a => !entityBs.Any(b => b.Name == a.Name)).ToList();

创建一个类 类 我的类 { public int id {get; set;} 公共字符串名称 {get; set;} }

创建列表1

List<MyCLass> li1 = new List<MyCLass>();
MyCLass o1 = new MyClass();
o1.Id = 1;
o1.Name = "A";
li1.Add(o1);
o1 = new 
o1.Id = 2;
o1.Name = "B";
li1.Add(o1);
o1 = new new MyClass();
o1.Id = 3;
o1.Name = "C";
li1.Add(o1);
o1 = new new MyClass();
o1.Id = 4;
o1.Name = "D";
li1.Add(o1);

创建列表2

List<MyCLass> li2 = new List<MyCLass>();
o1 = new new MyClass();
o1.Id = 1;
o1.Name = "B";
li2.Add(o1);
o1 = new new MyClass();
o1.Id = 2;
o1.Name = "C";
li2.Add(o1);
o1 = new new MyClass();
o1.Id = 3;
o1.Name = "D";
li2.Add(o1);

仅从列表1中选择要比较的选定项目

List<string> SelectedName = li1.Select(s => s.Name).ToList();

仅最终列表 1 获取列表 2 中的那些项目

var FinalList = li2.Where(w => SelectedName.Contains(w.Name)).ToList(); 

///或

仅 FinalList2 获取不在列表 2 中的项目

var FinalList2 = li2.Where(w => !SelectedName.Contains(w.Name)).ToList();

相关内容

  • 没有找到相关文章

最新更新