Mau*_*uro 1 c# linq linq-to-sql
想象一下有一个类(和相应的db表)如下
class Price{
int ItemID;
int ItemTypeID;
string ItemName;
string ItemTypeName;
float Price;
}
Run Code Online (Sandbox Code Playgroud)
我正在通过LINQ搜索新的查询以获取不同项目的列表(可能使用Take()和Skip()方法)并嵌套所有相关价格的列表.
有什么建议吗?
编辑:为了使这个问题更简单,这是一个例子
想象一下有3个"价格"如下
1, 1, Ball, Blue, 10
1, 2, Ball, Red, 20
2, 1, Frisbee, Blue, 30
Run Code Online (Sandbox Code Playgroud)
我想把它们放在一个简化的结构中
List<Item>
哪里
class Item
{
string ItemName;
string ItemTypeName;
List<Price> Prices;
}
Run Code Online (Sandbox Code Playgroud)
和
class Price
{
float Price;
}
Run Code Online (Sandbox Code Playgroud)
使用Distinct(),像这样:
var results = _dbContext.Prices
.Distinct()
.Skip(15)
.Take(5);
Run Code Online (Sandbox Code Playgroud)
编辑:
要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})
});
Run Code Online (Sandbox Code Playgroud)
在此之后,你可以applay Take和Skip相同的方式,在第一个查询.
听起来好像你想要一个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();
Run Code Online (Sandbox Code Playgroud)