Y上的X属性无法设置为“十进制”值。您必须将此属性设置为类型为“Single”的非null值

时间:2013-06-05 20:30:39

标签: c# entity-framework linq-to-sql ef-code-first

所以我有这个相当强制性的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; }
}

2 个答案:

答案 0 :(得分:0)

Enumerable.Sum的表达式参数无法返回浮点数。因为它可以使用单个,小数,双精度等,所以它不知道隐式地将它投射到哪个。你必须明确地施展它。

试试这个

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

答案 1 :(得分:0)

在您的实体中,您具有Decimal类型,并且您将从SQL返回单一类型。 更新您的SQL查询(更好)或您的实体。