C# 根据不同名称的字符串属性相交2种不同类型的集合

C# 根据不同名称的字符串属性相交2种不同类型的集合,c#,linq,C#,Linq,我收集了两种不同的物品 我正在尝试基于字符串属性进行.Intersect public class EmployeeDto { public string SSN { get; set; } public DateTime HireDate { get; set; } } public class PersonDto { public string SocialSecurityNumber { get; set; } public string Name {

我收集了两种不同的物品

我正在尝试基于字符串属性进行.Intersect

public class EmployeeDto
{
    public string SSN { get; set; }
    public DateTime HireDate { get; set; }
}


public class PersonDto
{
    public string SocialSecurityNumber { get; set; }
    public string Name { get; set; }
}
尝试:

            ICollection<EmployeeDto> empsColl = new List<EmployeeDto>();
            empsColl.Add(new EmployeeDto() { SSN = "222-22-2222", HireDate = DateTime.Now });
            empsColl.Add(new EmployeeDto() { SSN = "333-33-3333", HireDate = DateTime.Now });
            empsColl.Add(new EmployeeDto() { SSN = "444-44-4444", HireDate = DateTime.Now });
            empsColl.Add(new EmployeeDto() { SSN = "555-55-5555", HireDate = DateTime.Now });


            ICollection<PersonDto> pers = new List<PersonDto>();

            pers.Add(new PersonDto() { SocialSecurityNumber = "333-33-3333", Name = "John" });
            pers.Add(new PersonDto() { SocialSecurityNumber = "444-44-4444", Name = "Mary" });



            ICollection<EmployeeDto> overlap1 = empsColl.Where(api => api.SSN.Any(val => val.Equals(pers.Any(cl => cl.SocialSecurityNumber.Equals(val))))).ToList();

 ICollection<EmployeeDto> overlap2 = empsColl.Where(api => api.SSN.Equals(pers.Any(per => per.SocialSecurityNumber.Equals(api.SSN, StringComparison.OrdinalIgnoreCase)))).ToList();



            foreach (EmployeeDto emp in overlap1)
            {
                Console.WriteLine(emp.SSN);
            }
ICollection empsColl=new List();
Add(newemployeedto(){SSN=“222-22-2222”,HireDate=DateTime.Now});
添加(newemployeedto(){SSN=“333-33-3333”,HireDate=DateTime.Now});
添加(newemployeedto(){SSN=“444-44-4444”,HireDate=DateTime.Now});
Add(newemployeedto(){SSN=“555-55-5555”,HireDate=DateTime.Now});
ICollection pers=新列表();
pers.Add(newpersondto(){SocialSecurityNumber=“333-33-3333”,Name=“John”});
pers.Add(newpersondto(){SocialSecurityNumber=“444-44-4444”,Name=“Mary”});
ICollection overlap1=empsColl.Where(api=>api.SSN.Any(val=>val.Equals(pers.Any)(cl=>cl.SocialSecurityNumber.Equals(val ')).ToList();
ICollection overlap2=empsColl.Where(api=>api.SSN.Equals(per.Any(per=>per.SocialSecurityNumber.Equals(api.SSN,StringComparison.OrdinalIgnoreCase))).ToList();
foreach(雇员在重叠1中加入emp)
{
控制台写入线(emp.SSN);
}
理想的结果是一个
i集合
,其中包含333-33-3333和444-44-4444的EmployeeDto对象


谢谢。

以下是如何做到这一点:

var overlap = empsColl.Where(e => pets.Any(p => p.SocialSecurityNumber == e.SSN)).ToList();

以下是如何做到这一点:

var overlap = empsColl.Where(e => pets.Any(p => p.SocialSecurityNumber == e.SSN)).ToList();

我想这样就行了

    empsColl.Where(ec => pers.Select(p => p.SocialSecurityNumber).Contains(ec.SSN)));

我想这样就行了

    empsColl.Where(ec => pers.Select(p => p.SocialSecurityNumber).Contains(ec.SSN)));
这应该行得通

    var result =  empsColl.Where(x => pers.Any(y=> string.Compare(y.SocialSecurityNumber, x.SSN) == 0));
这应该行得通

    var result =  empsColl.Where(x => pers.Any(y=> string.Compare(y.SocialSecurityNumber, x.SSN) == 0));
ICollection overlap4=empsColl.Where(e=>pers.Any(p=>p.SocialSecurityNumber.Equals(e.SSN,StringComparison.OrdinalIgnoreCase))).ToList();ICollection overlap4=empsColl.Where(e=>pers.Any(p=>p.SocialSecurityNumber.Equals(e.SSN,StringComparison.OrdinalIgnoreCase))).ToList();