如何使用linq基于参数应用连接

时间:2014-06-25 12:54:52

标签: linq join

我正在使用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,否​​则此查询将按原样运行。

1 个答案:

答案 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.