如何使用Linq从SQL(2008)正确转换两列为Dictionary
(用于缓存)?
目前,我通过循环IQueryable
来实现,因为我无法使ToDictionary
方法工作。 有什么想法吗?
以下是可行的示例:
var query = from p in db.Table
select p;
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var p in query)
{
dic.Add(sub.Key, sub.Value);
}
我真正想做的是像这样的事情,但似乎行不通:
var dic = (from p in db.Table
select new {p.Key, p.Value })
.ToDictionary<string, string>(p => p.Key);
但是我遇到了这个错误:
无法将'System.Linq.IQueryable<AnonymousType#1>'转换为 'System.Collections.Generic.IEnumerable'
kvp => kvp.Value as string
。答案的重点在于.AsEnumerable()
。 - yfeldblumAsEnumerable
?对我来说,即使没有它也可以工作,但可能Linq已经改变了(已经过去7年)。 - Alexander DerckAsEnumerable
是必要的。虽然经过这么长时间,我不太记得具体原因,但可能的解释是ToDictionary
是IEnumerable
的扩展方法,但 Linq-to-SQL 的接口不是IEnumerable
。 - yfeldblum