2015-03-18 2 views
-1

я следующий запросEntity рамки группы по с условиями

var maListe = (from p in db.exclure 
       where (p.type.Contains("Object")) 
       group p by p.libelle into g 
       select new 
       { 
        libellex = g.Key 
       }).ToList(); 

мне нужно сделать условия, на которых элемент группы, например, посредством

if(x==0) group by p.libelle 
else if (x==1) group by p.name 
else group by p.adresse 

Есть ли способ сделать это правильно Внутри мой запрос linq?

+0

Откуда берутся переменные вашего состояния? Известно ли x вне контекста запроса? – user3711864

+0

Да, это мой вопрос – Redadublex

ответ

1

Полагая х устанавливается уже, попробуйте следующее:

var maListe = (from p in db.exclure 
       where (p.type.Contains("Object")) 
       group p by new {obj = x==0 ? p.libelle : x==1 ? p.name : p.adresse } into g 
       select new 
       { 
        libellex = g.Key 
       }).ToList(); 

UPDATE: условие сортировки нужно имя свойства, чтобы избежать ошибки Invalid anonymous type member declarator. Поэтому я изменен линия group p by new {obj = x==0 ? p.libelle :.... etc

+0

ну, моя реальная переменная - «groupx» вместо x, я попробовал вашу группу предложений p новыми {groupx.Contains («objet»)? p.mc_object: groupx.Contains ("host")? p.mc_host: p.mc_host_class} в g, они сказали мне, что я не могу использовать анонимный тип – Redadublex

+0

Какая ошибка? – markpsmith

+0

Объявление анонимного недопустимого типа. – Redadublex

0

Также , вы можете создать лямбда-выражение, которое будет использоваться в качестве ключа в вашей группе:

int x=1; 
Func<Exclure,object> func = (b) => 
{ 
    switch (x) 
    { 
    case 0: 
     return b.libelle; 
    case 1: 
     return b.name; 
    default: 
     return b.adresse; 
    } 
}; 
var maListe = db.exclure.Where(p=>p.type.Contains("Object")).GroupBy(func).Select(g=>g.Key).ToList(); 
Смежные вопросы