C# linq store select子句作为函数变量
有没有办法将linq语句的select子句存储为变量 我有下面的类,并且select子句是重复的。我可以以某种方式将它存储为变量,这样我就不需要重复它了吗C# linq store select子句作为函数变量,c#,linq,entity-framework-core,asp.net-core-webapi,C#,Linq,Entity Framework Core,Asp.net Core Webapi,有没有办法将linq语句的select子句存储为变量 我有下面的类,并且select子句是重复的。我可以以某种方式将它存储为变量,这样我就不需要重复它了吗 public class TractRepository : ITractRepository { private DataContext context; public TractRepository(DataContext ctx) => context = ctx; pu
public class TractRepository : ITractRepository
{
private DataContext context;
public TractRepository(DataContext ctx) => context = ctx;
public async Task<IEnumerable<Tract>> GetAllAsync() =>
await context.Tracts.Include(p => p.ContractType).Include(p => p.ContractSubType).OrderByDescending(p => p.Id)
.Select(p => new Tract
{
Id = p.Id,
Acreage = p.Acreage,
Administrative = p.Administrative,
ContractType = new ContractType
{
Id = p.ContractType.Id,
ContractTypeName = p.ContractType.ContractTypeName
},
ContractSubType = new ContractSubType
{
Id = p.ContractSubType.Id,
ContractSubTypeName = p.ContractSubType.ContractSubTypeName
}
})
.ToListAsync();
public async Task<Tract> GetByIdAsync(long id) =>
await context.Tracts.Include(p => p.ContractType).Include(p => p.ContractSubType)
.Select(p => new Tract
{
Id = p.Id,
Acreage = p.Acreage,
Administrative = p.Administrative,
ContractType = new ContractType
{
Id = p.ContractType.Id,
ContractTypeName = p.ContractType.ContractTypeName
},
ContractSubType = new ContractSubType
{
Id = p.ContractSubType.Id,
ContractSubTypeName = p.ContractSubType.ContractSubTypeName
}
}).FirstOrDefaultAsync(p => p.Id == id);
}
您可以提取整个通用IQueryable以分离属性/方法。由于LINQ查询只有在被称为延迟执行的情况下才会执行,因此它可以用作组合其他查询的基础,例如
private IQueryable<Tract> Query() => context.Tracts
//.Include(p => p.ContractType)
//.Include(p => p.ContractSubType)
.Select(p => new Tract
{
Id = p.Id,
Acreage = p.Acreage,
Administrative = p.Administrative,
ContractType = new ContractType
{
Id = p.ContractType.Id,
ContractTypeName = p.ContractType.ContractTypeName
},
ContractSubType = new ContractSubType
{
Id = p.ContractSubType.Id,
ContractSubTypeName = p.ContractSubType.ContractSubTypeName
}
});
及
您可以提取整个通用IQueryable以分离属性/方法。由于LINQ查询只有在被称为延迟执行的情况下才会执行,因此它可以用作组合其他查询的基础,例如
private IQueryable<Tract> Query() => context.Tracts
//.Include(p => p.ContractType)
//.Include(p => p.ContractSubType)
.Select(p => new Tract
{
Id = p.Id,
Acreage = p.Acreage,
Administrative = p.Administrative,
ContractType = new ContractType
{
Id = p.ContractType.Id,
ContractTypeName = p.ContractType.ContractTypeName
},
ContractSubType = new ContractSubType
{
Id = p.ContractSubType.Id,
ContractSubTypeName = p.ContractSubType.ContractSubTypeName
}
});
及
public async Task<Tract> GetByIdAsync(long id) =>
await Query().FirstOrDefaultAsync(p => p.Id == id);