C# - IQueryable查询如何选择?

时间:2017-08-09 07:18:39

标签: c# linq iqueryable

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。

3 个答案:

答案 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 })  ;