【发布时间】:2013-12-17 13:47:49
【问题描述】:
我们有一个如下所列的类结构
public class ItemDTO
{
public int ItemID { get; set; }
}
public class CostPageDTO
{
public string CostPageNumber { get; set; }
public List<ItemDTO> Items { get; set; }
}
有两个列表 – 1) 数据库中存在的成本页和项目列表 2) 用户选择的成本页
问题
我们需要比较这两个列表并得到一个结果列表,其中包含实际集合和选定集合中不同项目的计数相同的成本页。
best performing LINQ 是什么(在链式方法中)?
预期结果
基于以下场景的预期结果是一个只有 1 个成本页的列表 - “C2”(项目匹配)
代码
static void Main(string[] args)
{
List<CostPageDTO> selectedCostPageAndItems = GetSelectedCostPageAndItems();
List<CostPageDTO> actualItems = GetActualItems();
//LINQ code to get the matching count costPages
}
private static List<CostPageDTO> GetSelectedCostPageAndItems()
{
ItemDTO i1 = new ItemDTO();
i1.ItemID = 1;
ItemDTO i2 = new ItemDTO();
i2.ItemID = 2;
ItemDTO i3 = new ItemDTO();
i3.ItemID = 3;
CostPageDTO c1 = new CostPageDTO();
c1.CostPageNumber = "C1";
c1.Items = new List<ItemDTO>();
c1.Items.Add(i1);
CostPageDTO c2 = new CostPageDTO();
c2.CostPageNumber = "C2";
c2.Items = new List<ItemDTO>();
c2.Items.Add(i2);
c2.Items.Add(i3);
//CostPageDTO c2Duplicate = new CostPageDTO();
//c2Duplicate.CostPageNumber = "C2";
//c2Duplicate.Items = new List<ItemDTO>();
//c2Duplicate.Items.Add(i2);
//c2Duplicate.Items.Add(i3);
List<CostPageDTO> selectedCostPageAndItems = new List<CostPageDTO>();
selectedCostPageAndItems.Add(c1);
selectedCostPageAndItems.Add(c2);
//selectedCostPageAndItems.Add(c2Duplicate);
return selectedCostPageAndItems;
}
private static List<CostPageDTO> GetActualItems()
{
ItemDTO i1 = new ItemDTO();
i1.ItemID = 1;
ItemDTO i2 = new ItemDTO();
i2.ItemID = 2;
ItemDTO i3 = new ItemDTO();
i3.ItemID = 3;
ItemDTO i3Duplicate = new ItemDTO();
i3Duplicate.ItemID = 3;
CostPageDTO c1 = new CostPageDTO();
c1.CostPageNumber = "C1";
c1.Items = new List<ItemDTO>();
c1.Items.Add(i1);
c1.Items.Add(i2);
c1.Items.Add(i3);
CostPageDTO c2 = new CostPageDTO();
c2.CostPageNumber = "C2";
c2.Items = new List<ItemDTO>();
c2.Items.Add(i2);
c2.Items.Add(i3);
c2.Items.Add(i3Duplicate);
List<CostPageDTO> actualItems = new List<CostPageDTO>();
actualItems.Add(c1);
actualItems.Add(c2);
return actualItems;
}
【问题讨论】: