我创建了一个返回所需数据的linq查询,我现在有了新的要求,需要在返回的结果中添加一个额外的字段。我的实体包含一个ID字段,我试图映射到另一个表而没有太多运气。
这是我到目前为止所做的。
Dictionary<int, string> itemDescriptions = new Dictionary<int, string>();
foreach (var item in ItemDetails)
{
itemDescriptions.Add(item.ItemID, item.ItemDescription);
}
DB.TestDatabase db = new DB.TestDatabase(Common.GetOSConnectionString());
List<Transaction> transactionDetails = (from t db.Transactions
where t.CardID == CardID.ToString()
select new Transaction
{
ItemTypeID= t.ItemTypeID,
TransactionAmount = t.TransactionAmount,
ItemDescription = itemDescriptions.Select(r=>r.Key==itemTypeID).ToString()
}).ToList();
我要做的是键入来自dictonary的值,其中key = itemTypeID
我收到此错误。
除了Contains运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现。
我需要修改什么?
答案 0 :(得分:1)
这是this question的副本。您遇到的问题是因为您正在尝试将内存中集合(itemDescriptions)与数据库表进行匹配。由于LINQ2SQL的工作方式,它试图在DB中执行此操作,这是不可能的。
基本上有三种选择(除非我遗漏了什么)
1)重构您的查询,以便将一个简单的原始对象传递给可以传递给DB的查询(仅当itemDescriptions是一个小集合时才有效)
2)在您的查询中使用:
from t db.Transactions.ToList()
...
3)在你做的时候取回你需要的对象,然后在第二步中填充ItemDescription。
请记住,第二个选项将强制LINQ评估查询并将所有事务返回到您的代码,然后在内存中进行操作。如果交易表很大,这将不会很快!