C# 根据不同名称的字符串属性相交2种不同类型的集合
我收集了两种不同的物品 我正在尝试基于字符串属性进行.IntersectC# 根据不同名称的字符串属性相交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 {
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();