Entity framework 带有lambda的Linq to Entities Select子句
我正在从事一个新项目,我们正在使用实体框架,开发负责人希望尽可能使用lambda查询。有一件事我们很难弄清楚,那就是如何专门选择两列。还有如何选择不同的。我们有一个表,其中包含一个供应商的多个条目,但我们只想获得一个供应商列表并加载到一个dictionary对象。它失败是因为它试图添加一个已经添加的键值。以下面的查询为例Entity framework 带有lambda的Linq to Entities Select子句,entity-framework,linq-to-entities,Entity Framework,Linq To Entities,我正在从事一个新项目,我们正在使用实体框架,开发负责人希望尽可能使用lambda查询。有一件事我们很难弄清楚,那就是如何专门选择两列。还有如何选择不同的。我们有一个表,其中包含一个供应商的多个条目,但我们只想获得一个供应商列表并加载到一个dictionary对象。它失败是因为它试图添加一个已经添加的键值。以下面的查询为例 Dictionary<int, string> dict = new Dictionary<int, string>(); dict =
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);
Dictionary dict=new Dictionary();
dict=GetWamVendorInfo().AsEnumerable()
.Where(x=>x.vendor\u name!=null&&x.vendor\u id!=null)
//.Select(x=>x.vendor\u id).Distinct()
.采取(2)
.ToDictionary(o=>int.Parse(o.vendor\u id.ToString()),o=>o.vendor\u name);
我想做的是只选择vendor\u id和vendor\u name,这样我们就可以得到不同的记录
任何帮助都将不胜感激
谢谢
朗达只需使用匿名对象:
var vendors = GetWamVendorInfo().AsEnumerable()
.Where(x => x.vendor_name != null && x.vendor_id != null)
.Select(new {x.vendor_id, x.vendor_name})
.Take(2)
就这样。您现在可以使用供应商[0]。供应商id
,供应商[0]。供应商名称
,等等。使用匿名类型:
// 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
的解析,我本来希望它已经是一个整数类型
请注意,您几乎肯定应该从查询中删除aseneumerable
调用-目前您将获取所有供应商并使用LINQ to对象进行过滤。创建一个空字典然后完全忽略它也是没有意义的。我怀疑您的完整查询应该是:
var vendors = GetWamVendorInfo()
.Select(x => new { VendorId = x.vendor_id,
VendorName = x.vendor_name } )
.Distinct()
.ToDictionary(o => o.VendorId,
o => o.VendorName);
另一方面,您应该询问您的开发负责人,他为什么要在任何地方使用lambda表达式(可能与查询表达式相反)。不同情况下,使用不同语法选项的代码更具可读性-这是值得灵活处理的。我刚刚测试了我的代码,因为我知道前两个有不同的键。.Distinct似乎仍然不起作用,因为我得到了具有相同vendorId的多条记录。我想我还应该提到vendorId不是这个表的主键,所以有些是空的,有些是重复的(为什么我需要选择distinct)。另外,vendorId是一个长字符串。@Rhonda:它只会被所有属性区分开来——换句话说,如果您有两个ID相同但名称不同的记录,它们是不同的,因此都将被返回。如果供应商ID是长的,为什么要将其转换为int?为什么不把它留长一点呢?这种转换可能只是尝试多种方法使下拉列表显示正确值的结果。事实证明,它长时间运行似乎很好。我们试图使用的数据的真实性是垃圾。很多供应商都有相同的id,但名称略有不同,具体取决于从哪个系统提取。这必须首先解决。然后代码就可以工作了。谢谢你的帮助。