C# 使用Linq.Expressions.Expression在较大的select子句中为结构赋值
如果我有一个最小化代码重用的表达式(比下面的表达式复杂得多,但用于演示)C# 使用Linq.Expressions.Expression在较大的select子句中为结构赋值,c#,linq-to-entities,expression-trees,C#,Linq To Entities,Expression Trees,如果我有一个最小化代码重用的表达式(比下面的表达式复杂得多,但用于演示) 我想你是想做类似的事情 不能在选择投影中使用自定义表达式。但是您可以让您的实体实现一个接口,然后创建一个新的投影,该投影将返回整个实体旁边的自定义属性。这允许您封装共享一个接口的多个实体共享的逻辑。答案是使用LinqKit var is28 = ParticipantBaseModel.Is28Expression(); return new ParticipantsSummary(from p in _dbContext
我想你是想做类似的事情
不能在选择投影中使用自定义表达式。但是您可以让您的实体实现一个接口,然后创建一个新的投影,该投影将返回整个实体旁边的自定义属性。这允许您封装共享一个接口的多个实体共享的逻辑。答案是使用LinqKit
var is28 = ParticipantBaseModel.Is28Expression();
return new ParticipantsSummary(from p in _dbContext.Participants.AsExpandable()
select new ParticipantStage
{
Id = p.Id,
Arm = p.TrialArm,
Is28 = is28.Invoke(p)
}));
var is28 = ParticipantBaseModel.Is28Expression();
return new ParticipantsSummary(_dbContext.Participants.Select(p =>
new ParticipantStage
{
Id = p.Id,
Arm = p.TrialArm,
Is28 = is28(p)
}));
var is28 = ParticipantBaseModel.Is28Expression();
return new ParticipantsSummary(from p in _dbContext.Participants.AsExpandable()
select new ParticipantStage
{
Id = p.Id,
Arm = p.TrialArm,
Is28 = is28.Invoke(p)
}));