2012-04-30 12 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。では、これを達成するためのもう1つの選択肢は何でしょうか?

UPDATE:ランタイムがこの例外をスローするので、それが動作しない理由は次のとおりです。ローカルシーケンスが含まれています()演算子

+3

最終結果として何を得ようとしていますか? – Stephen

+2

「これは正しくない」のはなぜですか?それは例外を発生させますか? – digEmAll

+1

Quantityプロパティ値をデータソースから更新しようとしていますか? – jlafay

答えて

2

以外クエリ演算子のSQL実装にLINQで使用することはできませんあなたの最後のコメントによると、してみてくださいこのソリューション:

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

だから、それはあなたが関連付けられているFareFareCodeを変更し、すべての単一のOrderのためのあなたのDataContextを押すことなく、各Fareの量を合計したい、各Orderのためのように見えます。

私はOrdersリストにGROUPBY/ToDictionaryコンボを使用し、Faresリストに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

関連する問題