动态where子句有两个实体

问题描述 投票:0回答:1

我需要两个实体之间的过滤器。有两个表1.User 2.Product产品图与User表。

我打算创建一个动态的过滤器。

我需要找出所有拥有'测试'产品的用户。

条件:如果userFilter计数为0,那么我需要所有测试产品与受尊敬的用户。

如果userFilter在那里并且productFilter在那里,那么下面的代码正在工作,但是如果userFilter不在那里并且productFilter在那里,那么它返回0行。如何找到拥有测试产品的用户? ?

这是我的代码。

public IHttpActionResult GetFilter()
        {
            var userFilters = new List<Filter>()
            {
                new Filter { PropertyName = "Username" ,
                    Operation = Op .Equals, Value = "Karan"  },
            };

            var productfilter = new List<Filter>()
            {
                new Filter { PropertyName = "Name" ,
                    Operation = Op .Equals, Value = "Test product"  }
            };

            Func<User, bool> deleg = x => true;
            Func<Product, bool> delegProduct = x => true;

            if (userFilters.Count > 0)
            {
                deleg = ExpressionBuilder.GetExpression<User>(userFilters).Compile();
            }

            if (productfilter.Count > 0)
            {
                delegProduct = ExpressionBuilder.GetExpression<Product>(productfilter).Compile();
            }

            var resultt = _localmarketEntities.Users.Where(deleg)
                .Select(x => new
                {
                    x.Id,
                    x.Username,
                    Product = x.Products.Where(delegProduct).Select(y => new
                    {
                        y.Id,
                        y.Name
                    }).ToList()
                })
                .ToList();

            return Ok(resultt);
        }
linq linq-to-entities linq-to-objects
1个回答
0
投票

如果我理解正确,那么当userFiler计数为0时,您需要拥有测试产品的所有用户。

List<User> res;
var user = _localmarketEntities.Users.Where(deleg).ToList();
if (user.Count == 0) {
    res = _localmarketEntities.Products.Where(delegProduct).Select(q => new User() {
       Id = q.Id,
       Username = q.Username,
       Product = q
    }).ToList();
}
else {
    res = _localmarketEntities.Users.Where(deleg)
          .Select(x => new
          {
              x.Id,
              x.Username,
              Product = x.Products.Where(delegProduct).Select(y => new
              {
                  y.Id,
                  y.Name
              }).ToList()
            })
            .ToList();
}
© www.soinside.com 2019 - 2024. All rights reserved.