LINQ 根据条件查询条件

LINQ Query condition based on a condition

我有一个 LINQ 查询如下:

   var query = from r in Context.Role()
        join rg in Context.RoleGroup() on r.RoleId equals rg.FkRoleId
        where r.RoleName != "guests" && r.RoleName != "SystemAdmin"
    select rg;

但是,我需要包含一个附加条件,即不应根据外部条件(例如,登录用户是超级用户)排除 SystemAdmin。

按照建议 here,我修改了如下查询:

       var query = from r in Context.Role()
        join rg in Context.RoleGroup() on r.RoleId equals rg.FkRoleId
        where r.RoleName != "guests" && (userId == 1 || r.RoleName != "SystemAdmin")
    select rg;

但即使 userId 不是 1,我仍然可以在输出中看到 SystemAdmin 角色。如何获得所需的输出?

将此代码用于动态 where 条件:

           if (printType == "BatchWise")
            {
                whereCondition = "BatchNo.Equals(@" + 0 + ")";
                array[0] = Convert.ToString(printNumber);
            }
            else
            {
                whereCondition = "TagNo.Equals(@" + 0 + ")";
                array[0] = Convert.ToString(printNumber);
            }

            using (var inventoryDb = new InventoryDb())
            {
                var pricingInfo = (from price in invDb.Pricing.AsNoTracking()
                                   where tagDtl.AvailableQuantity > 0
                                   select new
                                   {
                                       PricingNo = price.PricingNo,
                                       ............
                                   }).Where(whereCondition, array).ToList();
            }

查询如下:

var query = from r in Context.Role()
    join rg in Context.RoleGroup() on r.RoleId equals rg.FkRoleId
    where r.RoleName != "guests" && (userId == 1 || (userId> 1 && r.RoleName != "SystemAdmin"))
select rg;