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在声明和用法上不匹配。