C# 创建等于int32的IQueryable?

C# 创建等于int32的IQueryable?,c#,entity-framework,iqueryable,C#,Entity Framework,Iqueryable,我正在尝试创建一个查询扩展,它将比较一个可为null的int-sql列值和一个值。但我已经挣扎了8个多小时才找到有效的解决方案 我已经在这方面找到了很多帮助。但所有这些话对我都没有帮助 我已经多次修改代码,但似乎没有任何效果。我想创建类似于ManagerID在(10,20,30)中的位置的东西 主代码 IQueryable<Users> query = _context.CreateObjectSet<Users>(); query = query.IsMember(a

我正在尝试创建一个查询扩展,它将比较一个可为null的int-sql列值和一个值。但我已经挣扎了8个多小时才找到有效的解决方案

我已经在这方面找到了很多帮助。但所有这些话对我都没有帮助

我已经多次修改代码,但似乎没有任何效果。我想创建类似于ManagerID在(10,20,30)中的位置的东西

主代码

IQueryable<Users> query = _context.CreateObjectSet<Users>();
query = query.IsMember(a => a.ManagerID, new Int32?[] { 10,20,30 });
return query.ToList();
对于基于字符串的Like和Equals,它工作得很好。但是想要(可为空的)整数有一个类似的乘积吗

我受到以下帖子的启发。它创建了一个搜索功能(为了让我的项目喜欢,我重命名了该功能)

我想创造其他类似的。最后一个布尔值用于验证列中是否允许为null

使用扩展的原因是,我的过滤器页面中也有很多过滤器。 有了这个扩展,我可以很容易地在Like和Equal函数的开头检查是否给出了一个过滤器,而不检查我的过滤器是否有20x的值

public static IQueryable<T> Like<T>(this IQueryable<T> source, Expression<Func<T, string>> stringProperty, string searchTerm, bool isnullValueAllowed)
        if (String.IsNullOrEmpty(searchTerm))
        {
            return query;
        }
publicstaticiqueryable-Like(此IQueryable源代码、表达式stringProperty、字符串searchTerm、bool isnullValueAllowed)
if(String.IsNullOrEmpty(searchTerm))
{
返回查询;
}

不清楚为什么要创建此扩展,因为您可以简单地编写如下内容:

query.Where(user=>(new[]{10,20,30}).Contains(user.ManagerId)).ToList();

但是,假设实际用例比您给出的示例稍微复杂一些,您能否将表达式构造为与常量Int32的比较或与null的比较,这取决于
searchTerm.HasValue()
是真的吗?

这里需要使用相等运算符
=
而不是
等于
方法。它实际上使表达式代码变得更简单:

foreach (var searchTerm in searchTerms)
{
    var comparison = Expression.Equals(stringProperty.Body, 
        Expression.Constant(searchTerm));

    orExpression = BuildOrExpression(orExpression, comparison);
}

当然,正如其他人提到的,您不需要构建一个表达式来表示这些比较中的一个或,您只需在lambda中的集合上使用
Conatains
,查询提供程序就会为您完成所有这一切。

为什么不使用这个
query.Where(a=>(new Int32?[{10,20,30})。Contains(a.ManagerID)
?…我刚问了一下,我发现Int32?没有嵌入Equal函数。是否可以创建一个扩展名,该扩展名的处理方式与string.Equal类似?@Cedric肯定会的。
public static IQueryable<T> Like<T>(this IQueryable<T> source, Expression<Func<T, string>> stringProperty, string searchTerm, bool isnullValueAllowed)
        if (String.IsNullOrEmpty(searchTerm))
        {
            return query;
        }
foreach (var searchTerm in searchTerms)
{
    var comparison = Expression.Equals(stringProperty.Body, 
        Expression.Constant(searchTerm));

    orExpression = BuildOrExpression(orExpression, comparison);
}