所以我有这个相当强制性的LINQ查询:
// This query will get the top 10 items sold.
IEnumerable<IGrouping<Item, ItemSale>> results = (
from x in database.ItemSales
where shiftIDs.Contains(x.shiftID)
group x by x.item into itemSalesGroup
orderby itemSalesGroup.Sum(y => y.SalesValue) descending
select itemSalesGroup
).Take(10);
它在y.SalesValue上崩溃,说它无法设置为十进制值。我该如何解决?我尝试过以下方法:
orderby itemGroup.Sum(y => (float?)y.SalesValue) ?? 0f descending
orderby itemGroup.Sum(y => (float?)y.SalesValue ?? 0f) descending
以下是相关的实体框架代码优先定义:
[Table("ItemSales")]
public class ItemSale {
public int ID { get; set; }
[Column("ItemID")]
public int itemID { get; set; }
[ForeignKey("itemID")]
public Item item { get; set; }
[Column("Shifts_ID")]
public int shiftID { get; set; }
[ForeignKey("shiftID")]
public Shift shift { get; set; }
...
public float SalesValue { get; set; }
}
答案 0 :(得分:0)
Enumerable.Sum的表达式参数无法返回浮点数。因为它可以使用单个,小数,双精度等,所以它不知道隐式地将它投射到哪个。你必须明确地施展它。
试试这个
orderby itemSalesGroup.Sum(y => (single) (y.SalesValue)) descending
答案 1 :(得分:0)
在您的实体中,您具有Decimal类型,并且您将从SQL返回单一类型。 更新您的SQL查询(更好)或您的实体。