不能将Y上的X属性设置为'Decimal'价值.必须将此属性设置为'Single'类型的

本文关键字:设置 属性 Single 类型 价值 不能 上的 Decimal | 更新日期: 2023-09-27 18:17:12

所以我有这个相当复杂的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

下面是相关的Entity-Framework Code First定义:

[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; }
}

不能将Y上的X属性设置为'Decimal'价值.必须将此属性设置为'Single'类型的

Enumerable的表达式参数。Sum不能返回浮点数。因为它可以处理单精度、小数、双精度等,所以它不知道隐式地将其转换为哪一种类型。你必须显式地强制转换它

试试这个

 orderby itemSalesGroup.Sum(y => (single) (y.SalesValue)) descending

在你的实体中,你有十进制类型,你从SQL返回单一类型。更新你的SQL查询(更好)或你的实体