LINQ Query C#中的三元If

2hh7jdfx  于 2022-12-06  发布在  C#
关注(0)|答案(2)|浏览(154)

我有这个代码:

var sites = context.SITES.OrderBy(s => s.NAME).ToList();
 if (userId != 0)
     sites = context.SITES.OrderBy(s => s.NAME).Where(s => s.Users.Any(x => x.ID == userId)).ToList();

是否可以在查询中使用if?我需要在一行代码中执行此代码

var sites = context.SITES.OrderBy(s => s.NAME) 
if(userId != 0) {
    .Where(s => s.Users.Any(x => x.ID == userId)) 
}
.ToList();

我想要这样东西

jvidinwx

jvidinwx1#

您可以在这里利用IQueryable/Entity Framework的'延迟执行'特性。因此,从初始查询开始:

IQueryable<Site> query = context.SITES;

现在,如果需要,请添加过滤器:

if(userId != 0) {
    query = query.Where(s => s.Users.Any(x => x.ID == userId)) ;
}

最后,添加排序并使用ToList枚举结果:

var list = query.OrderBy(s => s.NAME).ToList();
pkmbmrz7

pkmbmrz72#

您可以稍微修改一下,使其正常工作:

IQueryable<Site> sites = context.SITES.OrderBy(s => s.NAME) 
if(userId != 0) {
    sites = sites.Where(s => s.Users.Any(x => x.ID == userId)) 
}

或者,您可以使用以下方式内联if

var sites = sites.Where(s => (userId == 0) || (s.Users.Any(x => x.ID == userId))) 
                 .OrderBy(s => s.NAME)
                 .ToList()

相关问题