2013-01-11 68 views
0

是否可以动态地结合表达式:动态撰写LINQ表达式

from c in collection where c.Property == true select c 

与表达

from result in results 
group result by result.Property 
into g 
select new g.Key 

其中“结果”应该是集合从第一表达式返回?

我将使用由表达式从分贝使用NHibernate获取数据,所以我想联合表达为等于我是否写为

from c in collection 
where c.Property == true 
group c by c.Property 
into g 
select new g.Key 

表达式是在所定义的等级:

public class MyClass : MyAbstractClass<User> 
{ 
    public MyClass() 
    { 
     FirstExpression = users => from user in users where ... select user;    

     SecondExpression = results => from result in results 
         group result by result.Property into g 
         select g.Key 

    } 
} 

回答

0

是的,这是可能的。只需将第一个查询到results变量的结果,而不枚举它:

var results = from c in collection where c.Property == true select c; 

from result in results 
group result by result.Property 
into g 
select g.Key; 

顺便说一句,你的第二个查询是一个简单的distinct

results.Distinct(r => r.Property); 
+0

OK,但如果两个表达式是该类的属性,例如FirstExpression和SecondExpression? –

+0

@ petrov.alex:请尝试重新修饰这句话,它不会像现在这样表达太多意思。表达式通常不是一个类的属性 - 表达式是使用*类的属性书写的。 –

+0

我已经更新的问题,请检查是否有意义现在 –

1
var query = collection; 

if (condition) 
    query = query.Where(c => c.Property); 

var result = query.GroupBy(c => c.Property).Select(g => g.Key);