我正在使用lambda表达式来构建一个查询,我陷入了这样一种情况:我必须使用2个表来应用连接但是它将基于参数,如果参数“status = 1”那么必须在两者之间应用2个表,如果“status = 0”,那么不需要在那里申请加入。
如何根据某些参数应用连接? 请记住我不想用if和else条件重写查询2次。我需要使用单个查询来执行此操作。
以下是我的询问:
db.Users.AsQueryable().AsExpandable().Where(featuredUserPredicate)
.GroupJoin(db.UserProfile, u => u.UserID, up => up.UserID, (u, up) => new { Users = u, UserProfile = up })
.SelectMany(s => s.UserProfile.DefaultIfEmpty().AsEnumerable(), (s, up) => new { s, up })
.GroupJoin(db.ProjectReview, u => u.s.Users.UserID, pr => pr.ReviewForUserId, (u, pr) => new
{
u,
pr
}).SelectMany(s => s.pr.DefaultIfEmpty().AsEnumerable(), (s, pr) => new
{
s.u,
Rate = pr == null ? 0 : pr.Rate
}).GroupBy(g => new { g.u.s.Users }).Select(r => new
{
key = r.Key.Users.UserID,
name = r.Key.Users,
sum = r.Sum(l => l.Rate)
}))
在上面的查询中,我想从“usercategory”表中再添加一个连接,但此连接将基于“status”值。如果值为“status = 1”,则将应用join,否则此查询将按原样运行。
答案 0 :(得分:0)
您可以像这样创建查询对象。
var query = context.MyTable; //main query
query = status == 1 ? query.Join() : query; //apply join conditionally
query = query.Where() // more expressions, might also need conditions here
query = query.Skip().Take() // apply your paging here
var result = query.ToList();// this is where the query will be executed.