C# 如何使用linq根据父列表中的一个字段将列表拆分为两个单独的列表
下面是生成列表的linqC# 如何使用linq根据父列表中的一个字段将列表拆分为两个单独的列表,c#,.net,linq,C#,.net,Linq,下面是生成列表的linq var query = (from vinfo in vQuery join Add in _db.Addresses on vinfo.Id equals Add.vId select new AddressLabels { Id = vinfo.Id, Name = vinfo.Name, Address1 =
var query = (from vinfo in vQuery
join Add in _db.Addresses on vinfo.Id equals Add.vId
select new AddressLabels
{
Id = vinfo.Id,
Name = vinfo.Name,
Address1 = Add.Address1,
Address2 = Add.Address2,
ZipCode = Add.ZipCode,
City = Add.City,
Country = Add.Country,
Contact1 = Add.Contact1,
Contact2 = Add.Contact2
});
在上面的列表中,触点1和触点2可能相同。
当Contact1不等于contact2时,我必须为上述列表中的2个联系人中的每一个生成2个单独的列表。
这些列表将具有与父列表相同的数据,但一个列表将具有contact1,另一个列表将具有contact2
这就是我所看到的
清单1:
Id
Name
Address1
Address2
ZipCode
City
Country
Contact1
清单2:
Id
Name
Address1
Address2
ZipCode
City
Country
Contact2
请帮忙首先,为什么不必使用Linq?不一定是Linq。还应该怎么做?是的,我在看你答案的最后一部分,也就是说,当联系人不一样时。如何在列表上执行foreach循环以进行检查,从而仅在联系人不相同时生成单独的两个列表。?否则只有一个列表。已更新。检查第一行。
// Check if your list has items with same contacts
if (!query.Any(a => a.Contact1.Equals(a.Contact2)))
{
return query;
}
// Else, create two new lists
var itemsWithSameContacts = query.Where(a => a.Contact1.Equals(a.Contact2));
var firstList = itemsWithSameContacts.Select(a => new AddressLabels
{
Id = a.Id,
Name = a.Name,
Address1 = a.Address1,
Address2 = a.Address2,
ZipCode = a.ZipCode,
City = a.City,
Country = a.Country,
Contact1 = a.Contact1,
}).ToList();
var secondList = itemsWithSameContacts.Select(a => new AddressLabels
{
Id = a.Id,
Name = a.Name,
Address1 = a.Address1,
Address2 = a.Address2,
ZipCode = a.ZipCode,
City = a.City,
Country = a.Country,
Contact2 = a.Contact2,
}).ToList();
// If you want these lists also to have contacts
// which don't have same contacts, then you can also
var itemsWithNotSameContacts = query.Where(a => !a.Contact1.Equals(a.Contact2));
firstList.AddRange(itemsWithNotSameContacts);
secondList.AddRange(itemsWithNotSameContacts);