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