我对堆栈溢出进行了大量研究,没有一个答案对我有帮助,我有以下代码
public IEnumerable<OrdersList> GetOrdersList(string code)
{
return Repository.Find<OrdersList>(x => x.ProductTitle != "" && x.Code == code);
}
并且它工作得很好但是现在因为我在我的MSSQL 2014数据库中有一个视图正在使用我的多个函数我不能在该视图中做很多事情因此我必须使用LINQ进行一些转换,我需要的是过滤出价格最高的订单,并按ProductTitle和Code对其进行分组。
我拥有的数据:
当我尝试以下LINQ语法时:
public IEnumerable<OrdersList> GetOrdersList(string code)
{
return Repository.Find<OrdersList>(x => x.ProductTitle != "" && x.Code == code)
.GroupBy(x => x.MaxPrice);
}
它立即给我以下错误:
无法隐式转换十进制类型?到OrdersList,你错过了一个演员
我在想的是,在我做了一个GroupBy后,它只返回MaxPrice作为单个记录,这就是为什么它给了我错误,我需要实现的是:
我尝试添加GroupBy(x => x.MaxPrice).Select(s => s)
并且它仍然在设计时抛出相同的错误,欢迎任何关于如何实现我的结果的输入,谢谢你提前。
实体框架生成的模型:
class OrdersList
{
public decimal? MaxPrice { get; set; }
public string? Supplier { get; set; }
public string ProductTitle { get; set; }
public string? Code { get; set; }
}
答案 0 :(得分:1)
如果您想在具有相同标题和代码的订单中找到最高价格:
from o in orders
where o.Supplier != null &&
o.ProductTitle != null &&
o.Code != null &&
o.MaxPrice != null
group o by new { o.ProductTitle, o.Code } into g
select new
{
ProductTitle = g.Key.ProductTitle,
Code = g.Key.Code,
MaxPrice = g.Max(x => x.MaxPrice)
};
扩展方法链如下所示:
orders.Where(o => o.Supplier != null &&
o.ProductTitle != null &&
o.Code != null &&
o.MaxPrice != null)
.GroupBy(g => new { o.ProductTitle, o.Code })
.Select(g => new
{
ProductTitle = g.Key.ProductTitle,
Code = g.Key.Code,
MaxPrice = g.Max(x => x.MaxPrice)
});