2015-01-29 2 views
-1

Я пытаюсь создать LINQ запрос для следующих TSQL:Linq группы и совокупный

SELECT [TenantID] 
    ,[ABC] 
    ,COUNT(*) [TotalSKU], SUM([QtyOnHand]) AS [SOH],SUM([QtyOnHand]*[Price]) AS [SOH_Value] 
    ,SUM ([QtyOnOrder]) AS SOO 
    ,SUM ([QtyOnOrder]*[Price]) AS [SOO_Value] 
    FROM [OMS_StockStatus] GROUP BY [TenantID], [ABC] 

я справиться с этим до сих пор:

var res = from a in db.OMS_StockStatus 
         group a by new { a.TenantID, a.ABC } into g 
         select new ABCDashboard { TenantID = g.Key.TenantID, ABC = g.Key.ABC, TotalSKU = g.Count(), 
         SOH = g.Sum(t => t.QtyOnHand), SOH_Value = g.Aggregate((c,d) => decimal(c.QtyOnHand) * d.Price)}; 

Но я получаю следующее сообщение об ошибке:

«System.Linq.IGrouping» не содержит определения для «Агрегат» и лучший метод перегрузки расширения »System.Linq.Enumerable.Aggregate (System.Collections.Generic.IE исчислимый, System.Func)»имеет некоторые недопустимые аргументы


Это мое определение сущность:

public partial class ABCDashboard 
{ 
    public short TenantID { get; set; } 
    public string ABC { get; set; } 
    public double TotalSKU { get; set; } 
    public Nullable<double> SOH { get; set; } 
    public Nullable<decimal> SOH_Value { get; set; } 
    public Nullable<double> SOO { get; set; } 
    public Nullable<decimal> SOO_Value { get; set; } 
} 

В OMS_StockStatus, QtyOnHand вдвое? и цена удваивается?

+0

Синтаксис здесь ошибка? 'decimal (c.QtyOnHand)', должен быть '(десятичным) c.QtyOnHand', no? – CodingIntrigue

+0

@RGraham, я попробовал это изначально, но получал ошибку. Пожалуйста, обратитесь к моему ответу на Codeman ниже. –

+0

Вам нужно предоставить некоторые сведения о ваших полях. Какой тип 'SOH_Value'? Является ли значение 'QtyOnHand' допустимым? Если да, то каков вам результат «QtyOnHand * Price»? Если он должен быть нулевым, то что должно означать «SOH_Value»? – CodingIntrigue

ответ

1

попробовать с .. SOH_Value = g.Sum (т => ((десятичное) t.QtyOnHand) * t.Price)

+0

Я попытался это изначально, но получал ошибку на _ (десятичный) c.QtyOnHand * d.Price_ ** Невозможно неявно преобразовать тип «десятичный?»? to 'OMS_StockStatus' ** ** Невозможно преобразовать лямбда-выражение для делегирования типа «System.Func », потому что некоторые возвращаемые типы в блоке неявно конвертируются в тип возврата делегата ** –

+0

Тогда попробуйте это как g.Sum (t => t.QtyOnHand.HasValue? T.QtyOnHand: 0m * t.Price) , поэтому он будет использовать десятичное значение или если он равен нулю, он будет использовать 0 для вычисления с t. Цена – Codeman01101001

Смежные вопросы