2012-04-26 21 views
0

レコードを選択しようとしています。 データベースでは、1月と4月の2つのレコードがあります。LINQ Entity Frameworkレコードを選択

1月と4月の両方の値を取得する必要がありますが、取得するのは反復(月1と月4) 。

EX:dB月間1の値:55と月4の値は22ですが、コードの反復中に月1と4の両方で値55を取得します。

for (var month = 1; month <= 12; month++) 
      { 
    var itemMonth = month; 
    var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && i.Month == itemMonth && i.Year==itemYear); 
    // 
    } 
if (itemAuditReport == null) 
        { 
// Do Something 
} 

私には何かが欠けていますか?

+1

コードは問題ありません。データをダブルチェックするか、次のSQLを実行して同じ結果が得られるかどうかを確認してください。 select * from itemAuditReport iここで、i.SKU = itemSku && i.Month = 1 && i.Year = itemYear; select * from itemAuditReport iここでi.SKU = itemSku && i.Month = 4 && i.Year = itemYear; –

+0

月を1と4として明示的に指定してコードを実行すると、正しい結果が得られます。だから間違いなく何かがコードに間違っている。 – Nanu

答えて

0

はい、Entity Frameworkのモデルのキーが正しく設定されていなかったとして、SKUは、タイトルと主キーとして設定しました。その結果、同じ結果セットが得られます。

Sku、Month、Yearに適用されるキーを変更しました。

1

なぜこれはあなたにいくつかを与えるリストを利用すると、それに

List<Item> item = null; 

for (var month = 1; month <= 12; month++) 
{ 
var itemMonth = month; 
var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => i.SKU == itemSku && 
         i.Month == itemMonth && i.Year==itemYear); 
if(itemAuditReport!=null) 
    item.Add(itemAuditReport); 
// 
} 
+0

この解決策はあなたの問題を解決しますが、前と同じようなものに遭遇しましたが、別の理由があります。私はまた、あなたが機会を持っているときには明白な型を定義し、あいまいな型にはvarを残すことを提案します。 –

+0

これはOPのコードとどのように違うのか分かりません。 itemAuditReportは同じ結果を得ますが、nullをチェックするだけです。 OPの問題は、itemAuditReportが無効な結果を取得していることです。 –

+0

@RayCheng - レコードを取得した後にその変数を使用していないリスト内のデータをプッシュしています...問題の原因となる可能性があります... –

1

を項目を追加し、私は問題を引き起こしitemAuditReportが同じ項目であるが、反復に割り当てられますことを推測していますが

を試すいけませんあなたの誤りについての洞察 Why is it bad to use an iteration variable in a lambda expression 問題を解決するための手助けをすることができればお知らせいたします。

+0

例はありますか?私はまだこの問題に直面しています。それを解決する方法がわからない – Nanu

1

ジョンSykorはこの試みる、提案のように:次の例では、より多くのそれを説明する

for (var month = 1; month <= 12; month++) 
{ 
    var itemMonth = month; 
    var year = itemYear; 
    var sku = itemSku; 
    var itemAuditReport = proxy.itemAuditReports.SingleOrDefault(i => 
     i.SKU == sku && i.Month == itemMonth && i.Year==year); 
} 

を:

これは10 10回出力します。

List<Action> actions = new List<Action>(); 
for (int i = 0; i < 10; i++) 
{ 
    actions.Add(() => Console.WriteLine(i)); 
} 
foreach (Action action in actions) 
{ 
    action(); 
} 

が、次の出力は0 ... 9が期待

List<Action> actions = new List<Action>(); 
for (int i = 0; i < 10; i++) 
{ 
    var x = i; //<--important line 
    actions.Add(() => Console.WriteLine(x)); 
} 
foreach (Action action in actions) 
{ 
    action(); 
} 
+0

私はすでに月の値を保持する別の変数を指定しています。 – Nanu

関連する問題