1

私は値を取得しており、linq ステートメントで作成されたすべての匿名型の BatchId に値を表示したいと考えています。

コードは次のとおりです。

    var batchId = context.Request["batchid"];
    using (var db = new StarterSiteEntities())
    {   // Get data
        var transactions = (from t in db.Transactions
                            join td in db.TransactionDetails on t.TransactionID equals td.TransactionID
                            join p in db.Products on td.ProductID equals p.ProductID
                            where t.Exported == false
                            select new
                            {
                                BatchId = batchId,
                                t.FirstName,
                                t.LastName,
                                t.Address1,
                                t.Address2,
                                t.City,
                                t.State,
                                t.Zip_Code,
                                t.Email,
                                t.Phone,
                                t.TotalAmount,
                                t.MonthlyGift,
                                t.DateCreated,
                                p.Fund,
                                ProductFirstName = p.FirstName,
                                ProductLastName = p.LastName,
                                ProductUniversity = p.University,
                                ProductState = p.State,
                                ProductEmail = p.Email,
                                ProductAmount = td.Amount
                            }).ToList();
    }

これを行うと、次のエラー メッセージが表示されます。

「この場所ではパラメータは許可されていません。'@' 記号が有効な場所にあること、またはこの SQL ステートメントでパラメータが有効であることを確認してください。」

匿名型宣言内から batchId 変数を参照するにはどうすればよいですか? または別の方法でこれを達成する必要がありますか?

4

2 に答える 2

2

SQL Server CE データ アクセス ライブラリの既知のバグに遭遇したようです。データベースにアクセスしているマシンにこのホットフィックスを適用することで修正できるはずです。

于 2013-10-03T22:08:00.230 に答える
1

アダム・マラスが私の質問に答えたと思いますが。サーバーに修正プログラムをインストールしたくなかったので、別の方法で問題を解決することになりました。

Linq クエリでは文字列変数を使用できず、匿名型のプロパティ値を編集できなかったためです。匿名型の使用をやめ、「トランザクションの概要」データを保持するエンティティ クラスを作成しました。

TransactionSummary オブジェクトのコレクションを取得したら、Select() メソッドを使用して、各レコードの BatchId プロパティ値を更新できます。

結果のコードは次のとおりです。

// Define a custom type to hold the data
private class TransactionSummary
{
    public string BatchId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    //...removed lines for brevity...
}

//...here is the updated code snippet...
using (var db = new StarterSiteEntities())
{   // Get data
    var transactions = (from t in db.Transactions
                        join td in db.TransactionDetails on t.TransactionID equals td.TransactionID
                        join p in db.Products on td.ProductID equals p.ProductID
                        where t.Exported == false
                        select new TransactionSummary
                        {
                            FirstName = t.FirstName,
                            LastName = t.LastName,
                            //...removed lines for brevity...
                        }).ToList();

    // The client would like a batchID added to each record that we return.
    var batchId = context.Request["batchid"];
    transactions.Select(t => { t.BatchId = batchId; return t; }).ToList();
}
于 2013-10-05T19:04:05.817 に答える