0

次の LINQ クエリがあります。

    // Query the database
    IEnumerable<BestSeller> best_sellers = from bs in (db.smd_group)
                                           where bs.COMPANY == "SMD Textiles"
                                           where bs.DOCDATE > six_months_back
                                           where bs.CUSREF == customer.customer_ref
                                           group bs by bs.PRODCODE into g
                                           orderby g.Sum(x => x.MQTY) descending
                                           select new BestSeller()
                                           {
                                               product_code = g.Key.Trim(),
                                               total_quantity = Convert.ToString(g.Sum(x => x.MQTY)),
                                               // ERROR Occurs when the following line is removed
                                               //product_description = g.First().prd_prddes
                                           };

    // Get the top 25 products
    top25 = best_sellers.Take(25);

ご覧のとおり、BestSellerオブジェクトが作成された行をコメントアウトしました。

product_descriptionオブジェクト内にを設定したいと思いBestSellerます。だから私は以下の行を追加しました:

product_description = g.First().prd_prddes

「prd_prddes」は、製品の説明を保持する列の名前です。

ただし、この行をクエリに追加するとすぐに、奇妙なエラーが発生します。

列名「PRODCODE」が無効です。

列名「PRODCODE」が無効です。

列名「PRODCODE」が無効です。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException: 列名 'PRODCODE' が無効です。列名「PRODCODE」が無効です。列名「PRODCODE」が無効です。

列名 PRODCODE は、product_description行を削除しても問題なく機能するため、明らかに無効ではありません。

それは非常に独特です...

4

2 に答える 2

2

あなたが持っているものにgは名前の付いた列がないようです'PRODCODE'

個人的にはg、select ステートメントで選択するだけで、ブレークポイントを作成し、デバッガーを使用してその内容を確認します。

于 2012-11-15T15:41:46.490 に答える
0

PRODCODEすべての結果が有効かどうかを確認しましたか? おそらく1つがnullまたは空であるように聞こえます。これは、それでグループ化できることを意味しますが、選択しようとすると、そのエラーがスローされます。

これを試して:

product_description = g.FirstOrDefault() == null 
    ? g.FirstOrDefault().prd_prddes  
    : "Empty";

最初の項目が null の場合、フォールバックして「空」と表示されます。ただし、最初の項目が null かどうかわからないので、機能しない可能性があります...

于 2012-11-15T16:10:46.133 に答える