我正在开发一个新项目,我们正在使用Entity Framework,开发负责人希望尽可能使用lambda查询。我们很难弄清的一件事是如何专门选择两列。还有如何选择与众不同。我们有一个表,其中有一个供应商的多个条目,但我们只想获取供应商的列表并加载到字典对象中。它失败了,因为如所写,它试图添加已经添加的键值。进行以下查询。
Dictionary<int, string> dict = new Dictionary<int, string>();
dict = GetWamVendorInfo().AsEnumerable()
.Where(x => x.vendor_name != null && x.vendor_id != null)
//.Select(x => x.vendor_id).Distinct()
.Take(2)
.ToDictionary(o => int.Parse(o.vendor_id.ToString()), o => o.vendor_name);
我想做的只是选择vendor_id和vendor_name,这样我们就可以得到唯一的记录。
任何帮助将不胜感激。
谢谢,
朗达
最佳答案
使用匿名类型:
// earlier bit of query
.Select(x => new { VendorId = x.vendor_id, VendorName = x.vendor_name } )
.Distinct()
.ToDictionary(o => o.VendorId, o => o.VendorName);
我已经删除了对
Take(2)
的调用,因为尚不清楚您为什么要这么做-并且还删除了对VendorId
的解析,我原本希望它已经是整数类型。请注意,您几乎应该确定要从查询中删除
AsEnumerable
调用-当前,您将获取所有供应商并使用LINQ to Objects进行过滤。创建空字典然后完全忽略它也是没有意义的。我怀疑您的完整查询应该是:var vendors = GetWamVendorInfo()
.Select(x => new { VendorId = x.vendor_id,
VendorName = x.vendor_name } )
.Distinct()
.ToDictionary(o => o.VendorId,
o => o.VendorName);
顺便说一句,您应该问您的开发负责人为什么他要在各处使用lambda表达式(大概与查询表达式相对)。不同的情况最终导致使用不同的语法选项的代码更具可读性-在这方面值得灵活。
关于entity-framework - 带有lambda的Linq to Entities Select子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7286328/