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 回答