想象一下有一个类(和相应的db表)如下
class Price{
int ItemID;
int ItemTypeID;
string ItemName;
string ItemTypeName;
float Price;
}
我正在通过LINQ搜索新的查询以获取不同项目的列表(可能使用Take()和Skip()方法)并嵌套所有相关价格的列表。
有什么建议吗?
编辑:为了使问题更简单,这是一个例子
想象一下3"价格"如下
1, 1, Ball, Blue, 10
1, 2, Ball, Red, 20
2, 1, Frisbee, Blue, 30
我想把它们放在一个简化的结构中
List<Item>
其中
class Item
{
string ItemName;
string ItemTypeName;
List<Price> Prices;
}
和
class Price
{
float Price;
}
答案 0 :(得分:5)
使用Distinct()
,如下所示:
var results = _dbContext.Prices
.Distinct()
.Skip(15)
.Take(5);
修改强>
要根据您的要求填写List<Item>
每个项目的价格列表,您应该使用GROUPBY
这样的内容:
var results = _dbContext.GroupBy( i => new { i.ItemName, i.ItemTypeName })
.Select( g => new Item()
{
ItemName = g.Key.ItemName,
ItemTypeName = g.Key.ItemTypeName,
Prices = g.Select( p => new Price(){Price = p.Price})
});
之后,您可以采用与第一次查询相同的方式来展示Take
和Skip
。
答案 1 :(得分:5)
听起来好像你想要一个GroupBy。尝试这样的事情。
var result = dbContext.Prices
.GroupBy(p => new {p.ItemName, p.ItemTypeName)
.Select(g => new Item
{
ItemName = g.Key.ItemName,
ItemTypeName = g.Key.ItemTypeName,
Prices = g.Select(p => new Price
{
Price = p.Price
}
).ToList()
})
.Skip(x)
.Take(y)
.ToList();