Sql для linq в wpf с использованием Visual Studio 2010 - PullRequest
0 голосов
/ 23 февраля 2012

Hy,
Я хочу преобразовать команду sql в linq, но я получаю сообщение:

< Nullable object must have a value >

Мой SQL-запрос:

 Select sum(PosList.Cantity) AS cant, sum(PosList.Value) as mysum,PosList.price,PosList.Name
 from list Inner join PosList On list.ID = PosList.FactID 
 WHERE     (list.FirID = 1) AND (PosList.Date BETWEEN '2011-02-22' AND '2012-02-22') 
 GROUP BY PosList.Name, PosList.Price ORDER BY Value DESC

Мой linq:

    var w = (from item in list join itemPos in PosList   on item.ID equals itemPos.FactID      
  where item.FirID == this.firId && item.Date >= date_start && item.Date <= date_stop   
  group itemPos by itemPos.Name into hh   
  let mysum = hh.Sum(s => s.Value)    
  let cant = hh.Sum(n => n.Cantity)   
  let price = hh.Average(i => i.Price)                                  
  orderby mysum descending  
  select new Agent("", 0, 0, "", hh.Key, "", 0, (double)price, (double)cant, (double)mysum, 0, "", "", "", "", ""));

Я попробовал следующий linq, но он не работал:

 var w = (from item in list
 join itemPos in PosList  on item.ID equals itemPos.FactID   
 where item.FirID == this.firId && item.Date >= date_start && item.Date <= date_stop   
 group itemPos by itemPos.Name into hh   
 let mysum = hh.Sum(s => s.Value)                    
orderby mysum descending  
 select new Agent("", 0, 0, "", hh.Key, "", 0, (double)hh.Average(i =>i.Price), (double)hh.Sum(n =>n.Cantity), (double)mysum, 0, "", "", "", "", ""));   

Единственный linq, который работает нормально:

   var w = (from item in list
    join itemPos in PosList
   on item.ID equals itemPos.FactID   
    where item.FirID == this.firId && item.Date >= date_start && item.Date <= date_stop   
    group itemPos by itemPos.Name into hh   
   let mysum = hh.Sum(s => s.Value)                    
   orderby mysum descending  
  select new Agent("", 0, 0, "", hh.Key, "", 0, 0, 0, (double)mysum, 0, "", "", "", "",""));   

но мне также нужны эти два значения (цена и стоимость) ..
Спасибо!

1 Ответ

1 голос
/ 23 февраля 2012

Таким образом, часть (double)hh.Average(i =>i.Price), (double)hh.Sum(n =>n.Cantity) вызывает исключение. Это означает, что вы должны добавить условия, чтобы получить записи, в которых цена не равна нулю, а Cantity не равна нулю. И добавить i.Price.Value и n.Cantity.Value.

(Возможно, это относится только к цене или стоимости, но я не могу сказать это по вашему коду).

...