Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq根据父列表中的一个字段将列表拆分为两个单独的列表_C#_.net_Linq - Fatal编程技术网

C# 如何使用linq根据父列表中的一个字段将列表拆分为两个单独的列表

C# 如何使用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 =

下面是生成列表的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 = 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);