2016-02-05 81 views
3

我想使用表达式树来制作带有实体框架的过滤器。表达式<Func <T1,T2,TResult >>和Sql IN

所以这是我的类型

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转换这一点。

我怎么能做到这一点,和什么是最好的形式?

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

+2

问题是?是“我如何让实体框架以我想要的方式解释我的任意表达?”? – Jodrell

+0

Yeap,让我用你的问题来改善我的=] – Jedi31

+0

'type1s.Where(t1 => filter.Names.Contains(t1.Name))''有什么问题? – Rhumborl

回答

3

你可以这样做只是这样的:

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

你可以试试这个:

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

在此post你可以找到很好的解释为什么你可以lambda表达式转换为表达式树。

相关问题