entity-framework - 带有lambda的Linq to Entities Select子句

标签 entity-framework linq-to-entities

我正在开发一个新项目,我们正在使用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/

相关文章:

c# - 在 LINQ to Entities 中按周分组

c# - FirstOrDefault 两种方式

c# - 如何检查一个 char 数组是否包含另一个 char 数组中的每个元素?

linq - Linq 中的子查询

asp.net-mvc - EF 映射对象的不兼容数据读取器异常

c# - Add() 方法在代码优先 Entity Framework 中为链接模型添加重复行

c# - 我怎样才能从几个表达式的并集组成一个表达式树?

c# - 覆盖 LINQ .Include(),可能吗?

c# - Entity Framework 5.0 - 1 对 1 关系无故为 NULL

c# - 在 Entity Framework 查询的 Select 子句中使用函数