我在SQL Server中有一个包含3列,域,键和值的表。我想最终得到一个我可以在dot-net中使用的哈希。我正在使用EF 4.0。
起初我试过了:
List<Dictionary<string, string>> myHash = db.Registries
.Where(x => x.Domain == "Pricing")
.Select(x => new { Key = x.Key, Value = x.Value });
抱怨:
错误3无法将类型'System.Linq.IQueryable'隐式转换为'System.Collections.Generic.List&gt;'。存在显式转换(您是否缺少演员?)C:\ Users \ ekkis \ Documents \ Visual Studio 2010 \ Projects \ SkillScore \ Website \ Controllers \ HomeController.cs 53 21网站
显然需要调整选择的类型。我已经搞了半个小时(我很无用!)但是没能使它工作(上帝我想念IRC)。帮助任何人?
答案 0 :(得分:3)
听起来这就是你所需要的:
List<Dictionary<string, string>> myHash = db.Registries
.GroupBy(x => x.Domain)
.Select(g => g.ToDictionary(x => x.Key,
x => x.Value))
.ToList() ;
这会为每个域创建一个单独的字典,并将它们全部放在一个列表中。但这并不完全有用,因为您丢失了有关域名的信息 - 可能Dictionary<string, Dictionary<string,string>>
更符合您的要求(将域名作为外部词典的键)。
您可以直接使用ToDictionary()
获取单个域的字典:
var pricingDictionary = db.Registries
.Where(x => x.Domain == "Pricing")
.ToDictionary( x => x.Key,
x => x.Value);
请注意,pricingDictionary的类型为Dictionary<string, string>
,因此如果您需要完整类型,则可以执行以下操作:
Dictionary<string, string> myHash = db.Registries
.Where(x => x.Domain == "Pricing")
.ToDictionary( x => x.Key,
x => x.Value);
答案 1 :(得分:0)
我对以下内容感兴趣:“如何在LINQ查询中构建字典词典”。
这是我的拙劣尝试,未经测试,因为我没有LINQ-DB,因为我没有IIS,因为我无法安装IIS以获得“正版”原因猜测。
请随时编辑此代码以修复它(如果它已损坏)。
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args) {
var registries = FetchAllRegistries();
foreach ( KeyValuePair<string, Dictionary<string,string>> domain in registries ) {
Console.WriteLine("Domain: "+domain.Key);
foreach ( KeyValuePair<string,string> entry in domain.Value ) {
Console.WriteLine(" "+entry.Key+" "+entry.Value);
}
}
}
private static Dictionary<string, Dictionary<string, string>> FetchAllRegistries() {
return db.Registries
.GroupBy(x => x.Domain)
.Select(g => g.ToDictionary(
d => d.Domain,
d => d.ToDictionary(
kv => kv.Key,
kv => kv.Value
)
))
;
}
private static Dictionary<string, Dictionary<string, string>> FetchRegistry(string domainName) {
return db.Registries
.Where(x => x.Domain == domainName)
.ToDictionary(
x => x.Key
, x => x.Value
);
}
}
}
请原谅我:这些问题只是增加了我的观点,认为LINQ太丑陋,以至于它应该被削减,应该教导它向后走。是的:“长手”版本更加冗长,但它也更加不言自明。我想我的观点是“LINQ很棒。对STEEEEEEP学习曲线感到羞耻”。
而且,是的,请...让我们回到Perl cgi-scripts。祝福我父亲,因为我无法理解......我爱上了一个平民。叹息。
干杯。基思。