我正在抓取一个值,并希望它出现在通过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变量,还是应该以另一种方式完成此操作?
答案 0 :(得分:2)
看起来您遇到了SQL Server CE数据访问库中的已知错误。您应该能够通过applying this hotfix将其修复到正在访问数据库的计算机上。
答案 1 :(得分:1)
虽然我认为Adam Maras回答了我的问题。因为我不想在服务器上安装hot-fix,所以我最终使用不同的方法来解决问题。
由于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();
}