【发布时间】:2017-11-29 14:21:15
【问题描述】:
我需要两个实体之间的过滤器。 有两张表 1.User 2.Product 带有 User 表的产品图。
我将创建一个动态 where 过滤器。
我需要找出所有拥有“测试”产品的用户。
条件:如果 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 到对象的东西。除非您不打算在内存中进行所有过滤?无论如何,如果您从代码中删除
.Where(deleg)会发生什么,这应该与没有过滤器相同,它仍然没有返回任何内容吗? -
如果有userFilter那么我需要使用deleg。这就是为什么存在。因此,如果我将其删除,则无法通过 userFilter 对其进行过滤。有意义吗?
-
“
userFilter不存在”是什么意思? -
考虑 userFilter 什么都没有。表示没有与用户相关的过滤器。 Func
deleg = x => true;默认会执行。 -
那么你的代码看起来很好,我认为问题不在你想的地方——也许得到 LINQPad 或使用调试器,看看当
userFilters.Count为零时_localmarketEntities.Users.Where(deleg).Count()返回什么。
标签: linq linq-to-entities linq-to-objects