Rho*_*nda 5 linq-to-entities entity-framework
我正在开发一个新项目,我们正在使用Entity Framework,dev开发人员希望尽可能使用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);
Run Code Online (Sandbox Code Playgroud)
我想做的是只选择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);
Run Code Online (Sandbox Code Playgroud)
我已经删除了调用,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);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你应该问你的开发主角为什么他想在任何地方使用lambda表达式(可能与查询表达式相对).不同的情况最终会使用不同的语法选项获得更易读的代码 - 在这方面值得灵活.
只需使用匿名对象:
var vendors = GetWamVendorInfo().AsEnumerable()
.Where(x => x.vendor_name != null && x.vendor_id != null)
.Select(new {x.vendor_id, x.vendor_name})
.Take(2)
Run Code Online (Sandbox Code Playgroud)
就是这样。您现在可以使用vendors[0].vendor_id、vendors[0].vendor_name等。