2012-04-30 15 views
0

我有一種感覺,以下可能是一個暴行,也許這就是爲什麼它不起作用。 所以我現在在尋求你的幫助。 :-)我怎麼能在Linq中完成這項工作?

也請幫我編輯這個問題。我不知道這將是一個合適的標題或更好的制定方式。 (就像你現在可能已經猜到了,英語不是我的母語)。

考慮一個類,如:

public class Order 
{ 
    public int FareCode; 
    public int Quantity; 
} 

然後LINQ查詢,如:

var orders = new []{ new Order {...}, ...}; 
var fareCodes = orders.Select(o => o.FareCode).ToArray(); 
using(var dc = new datacontext()) 
{ 
    var query = dc.Fares 
       .Where(f => fareCodes.Contains(f.FareCode)) 
       .Select(f => new { 
       Fare = f, 
       Quantity = orders.Single(o => o.FareCode == f.FareCode).Quantity //<-- This is not right! 
       }) 
} 

所以Quantity = Orders.Single(o => o.FareCode == f.FareCode).Quantity ins't權。那麼,完成這個的另一個選擇是什麼?

更新:它不工作的原因是因爲運行時拋出此異常:局部序列不能在LINQ可以用於除載有()操作

+3

你想得到什麼結果? – Stephen

+2

爲什麼「這是不對的」?它是否引發異常? – digEmAll

+1

您是否試圖從數據源更新數量屬性值? – jlafay

回答

2

根據您的最後一個註釋執行SQL查詢操作時,儘量此解決方案:

var query = Fares 
     .Where(f => fareCodes.Contains(f.FareCode)).ToList() 
     .Select(f => new 
         { 
          Fare = f, 
          Quantity = Orders.Single(o => o.FareCode == f.FareCode).Quantity 
         }); 
+0

太棒了!就是這樣!謝謝! – Unlimited071

1

所以看起來每個Order,你想改變FareCode到相關Fare,總結各Fare的數量沒有擊中每單Order您的DataContext。

我會用Fares名單上的Orders名單上的GroupBy/ToDictionary組合,並ToDictionary()

// generates a dictionary of fare codes and total quantity of orders per fare code 
var fareQuantities = Orders.GroupBy(o => o.FareCode).ToDictionary(og => og.Key, og => og.Sum(o => o.Quantity)); 

using(var dc = new datacontext()) 
{ 
    var query = dc.Fares 
     .Where(f => fareQuantities.Keys.Contains(f.FareCode)) 
     .ToDictionary(f => f, f => fareQuantities[f.FareCode]); 
    // query is now a dictionary of fares and the total quantities of each fare ordered 
} 

希望有所幫助。

+0

這也適用。感謝您的答覆。 – Unlimited071