表达式> 和 Sql IN

本文关键字:IN Sql T2 Func T1 表达式 TResult | 更新日期: 2023-09-27 18:33:33

我想使用表达式树来制作带有实体框架的过滤器。

所以这是我的类型

public class Type1
{
    public string Name { get; set; }
}
public class Type2
{
    public IEnumerable<string> Names { get; set; }
}

这是我的规格

public Expression<Func<Entities.Type1, bool>> MyExpression(Type2 filter)
{
    //something like where name in (name[0], name[1], ... name[n])
}

我需要在类似 Sql 的地方转换它。

我该怎么做,最好的形式是什么?

如何使实体框架以我想要的方式理解我的任意表达式?

表达式<Func<T1、T2、TResult>> 和 Sql IN

你可以像这样简单地做到这一点:

public Expression<Func<Type1, bool>> MyExpression(Type2 filter)
{
    return x => filter.Names.Contains(x.Name);
}

你可以试试这个:

public Expression<Func<Type1, bool>> MyExpression(Type2 filter)
{
    Expression<Func<Type1, bool>> expression =  t1 => filter.Names.Contains(t1.Name);
    return expression;
}

在这篇文章中,您可以找到为什么可以将lambda表达式转换为表达式树的良好解释。