2012-07-24 203 views
-1

我想能夠添加if語句到linq查詢中以添加第二個LET。有誰知道這是否可能?由於將條件添加到LINQ LET查詢?

var query = from d in myList 
group d by d.Date 
into v 
let dataSum = nv.Sum(x => x.Data) 
select new MyObject(){ Date = nv.Key.Date, Data = dataSum} 

//Invalid I know... but something like this is what I'm looking for 
var query = from d in myList 
group d by d.Date 
into v 
let dataSum = nv.Sum(x => x.Data) 
if(secondaryData){ let dataSum2 = nv.Sum(x.Data2)} 
select new MyObject(){ Date = nv.Key.Date, Data = dataSum} 
+1

這不是LINQ應該如何使用。你想做什麼? – SLaks 2012-07-24 14:43:08

+0

@SLaks我試圖使查詢的通用性足以在需要有2列求和的條件下使用。我可以寫兩個查詢,但它們幾乎完全相同。 – NullReference 2012-07-24 14:45:05

+0

@NullReference,從無效語法開始的問題不太可能產生有用的結果(並且可用作參考,而不僅僅是特定的問題)。我建議你從你實際想要完成的事情開始。 – 2012-07-24 14:50:02

回答

4

您可以使用,如果速記:

let dataSum2 = secondaryData ? nv.Sum(x.Data2) : 0 
+4

三元運算符,供將來參考。 =) – 2012-07-24 14:46:35

+3

@ J.Steen - 實際上它是一個有條件的運算符。三元運算符是一個接受3個參數的運算符。 – Aducci 2012-07-24 14:56:15

+1

那麼,將它稱爲三元運算符並且兩者都被接受是很常見的。即使微軟把它命名爲條件操作符,是的。再次,所有知道的維基百科都將它命名爲三元運算符。 =) – 2012-07-24 15:27:41

1

試試這個。

List<Product1> prods = new List<Product1>(); 
     prods.Add(new Product1() { ProductPrice = 1, ValidFrom = DateTime.Today }); 
     prods.Add(new Product1() { ProductPrice = 3, ValidFrom = DateTime.Today }); 
     prods.Add(new Product1() { ProductPrice = 2, ValidFrom = DateTime.Today.AddDays(-1) }); 
     prods.Add(new Product1() { ProductPrice = 5, ValidFrom = DateTime.Today.AddDays(-2) }); 
    // Put any logic you want in sumFunc. For any field you want like ProductPrice 
    Func<Product1, decimal> sumFunc = (p) => p.ProductPrice; 

    var result = from c in prods 
       group c by c.ValidFrom into gd 
       let sum = gd.Sum(sumFunc) 
       select sum;