C# - IQueryable 查询如何 select?

C# - IQueryable query how to select?

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 *" 我想要 "select NameCode, Name, FirstName" 但我需要它作为 IQueryable。

对于 select 您需要投影到具有这些属性(匿名或自定义)的对象的特定列

.Select(t => new { t.FirstName, t.Name, t.NameCode })

此外,您可以将两个 where 条件放在同一个谓词中:

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();

简单使用匿名类型:

.Select(t => new { t.FirstName, t.Name, t.NameCode})

要将其转换为相同对象类型的列表,首先获取可枚举的数据。

List<ImportNameValidation> ResultValues = query.AsEnumerable().Select(t => new ImportNameValidation { t.FirstName, t.Name, t.NameCode })  ;