IQueryable<ImportNameValidation> query = entities.ImportNameValidation
.Where(y => y.FirstName == searchedName)
.Where(x => x.NameType == comboValue);
List<ImportNameValidation> ResultValues = query.ToList();
在这个查询中,我得到了6列,但我只需要其中的3列,如何使用select方法只获取我需要的列? 它是什么样的
.Select(t => t.FirstName, u => u.Name, i => i.NameCode);
我真正想要的是SQL而不是“select *”我想“选择NameCode,Name,FirstName”但我需要它作为IQueryable。
答案 0 :(得分:3)
要选择需要投影到具有这些属性(匿名或自定义)的对象的特定列
.Select(t => new { t.FirstName, t.Name, t.NameCode })
此外,您可以将两个条件放在同一个谓词中:
entities.ImportNameValidation
.Where(y => y.FirstName == searchedName && y.NameType == comboValue)
.Select(t => new { t.FirstName, t.Name, t.NameCode })
或者在查询语法中:
from item in entities.ImportNameValidation
where item.FirstName == searchedName && item.NameType == comboValue
select new { item.FirstName, item.Name, item.NameCode }
由于集合中的项目不再是ImportNameValidation
类型,因此您无法将其分配给List<ImportNameValidation>
。为此,项目到包含3个属性的自定义DTO对象(您不能投影到映射类型 - 将导致错误):
List<ImportNameValidationDTO> result = entities.ImportNameValidation
.Where(y => y.FirstName == searchedName && y.NameType == comboValue)
.Select(t => new ImportNameValidationDTO { t.FirstName, t.Name, t.NameCode })
.ToList();
答案 1 :(得分:3)
简单使用匿名类型:
.Select(t => new { t.FirstName, t.Name, t.NameCode})
答案 2 :(得分:1)
要将其转换为相同对象类型的列表,首先将数据提取为可枚举。
List<ImportNameValidation> ResultValues = query.AsEnumerable().Select(t => new ImportNameValidation { t.FirstName, t.Name, t.NameCode }) ;