Linq-to-SQL ToDictionary()
如何正确地将SQL(2008)中的两列使用Linq转换为Dictionary(用于caching)?
我目前通过IQueryable b / c循环我不能让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'转换为'System.Collections.Generic.IEnumerable'
var dictionary = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(kvp => kvp.Key, kvp => kvp.Value) ;
你只是定义了关键字,但是你也需要包含这个值:
var dic = (from p in db.Table select new {p.Key, p.Value }) .ToDictionary(p => p.Key, p=> p.Value);
感谢球员,你的答案帮助我解决这个问题,应该是:
var dic = db .Table .Select(p => new { p.Key, p.Value }) .AsEnumerable() .ToDictionary(k=> k.Key, v => v.Value);
为什么要为表中的每个项目创build一个匿名对象来转换呢?
你可以简单地使用这样的: IDictionary<string, string> dic = db.Table.ToDictionary(row => row.Key, row => row.Value);
您可能需要在Table和ToDictionary()之间包含一个AsEnumerable()调用。 我不知道db.Table的确切types。
还要纠正第一个示例,第二个循环variables在声明和用法上不匹配。