【发布时间】:2017-12-15 20:43:51
【问题描述】:
我有以下课程:
public class Item
{
public int Id { get; set; }
public string Sku { get; set; }
public List<Price> Prices { get; set; }
}
public class Price
{
public int Id { get; set; }
public double Cost { get; set; }
public PriceList List { get; set; }
}
public class PriceList
{
public int Id { get; set; }
public string FileName { get; set; }
public DateTime ImportDateTime { get; set; }
}
本质上,它是一个项目列表 [Item],其中每个项目都有一个价格列表 [List<Price> Prices](一对多),每个价格都有一个价格列表 [PriceList List] (一对一)。
我需要的是所有价目表的清单。
似乎我需要的是一个“孙子”组,基本上,按PriceList 的Id 分组(在Price 下,又在Item 下在列表中)。
因此,例如,如果我有五个价目表,它应该返回五行。
我通过以下方式实现了它:
List<PriceList> priceLists = new List<PriceList>();
foreach (Item item in items)
{
foreach (Price price in item.Prices)
{
PriceList list = price.List;
if (!priceLists.Any(x => x.Id == list.Id))
{
priceLists.Add(list);
}
}
}
如何使用 LINQ 来实现?
更新:
这是一个基本的样本集:
PriceList priceList1 = new PriceList { Id = 1, FileName = "Price List 1.csv" };
PriceList priceList2 = new PriceList { Id = 2, FileName = "Price List 2.csv" };
Price price1 = new Price { Id = 1, Cost = 2.65, List = priceList1 };
Price price2 = new Price { Id = 2, Cost = 14.23, List = priceList2 };
Price price3 = new Price { Id = 3, Cost = 29.01, List = priceList1 };
Price price4 = new Price { Id = 4, Cost = 1, List = priceList2 };
Price price5 = new Price { Id = 5, Cost = 56.12, List = priceList1 };
Item item1 = new Item { Id = 1, Sku = "item1", Prices = new List<Price> { price1, price2 } };
Item item2 = new Item { Id = 2, Sku = "item2", Prices = new List<Price> { price3, price4 } };
Item item3 = new Item { Id = 3, Sku = "item3", Prices = new List<Price> { price5 } };
List<Item> itemsList = new List<Item> { item1, item2, item3 };
让我们从底部向上开始:
- 我有一个
Item(itemsList) 列表,其中包含三个Items。 - 每个
Item都有一个Price列表。 - 每个
Price有一个PriceList。
为了澄清这一切背后的原因:用户导入他们定期从供应商那里获得的价格电子表格(价目表),价格会波动,并且每个价目表对相同商品都有不同的价格。因此,有一个商品有很多价格的原因,每个价格都有用于上传它的价目表(PriceList 类中包含更多信息,为了简单起见,我省略了)。
我希望我很清楚。
【问题讨论】:
-
所以
Price->PriceList并不是真正的one-to-one,而是many-to-one,最后是Item->PriceList是 many-to-many 到Price。和PriceList具有相同Id的对象不是同一个实例吗? -
您当前的方法是否产生分组结果集?我只能看到每个 PriceList Id 的一条记录(当我保留一些重复的 PriceList Id 时)。