2013-12-11 2 views
1

У меня есть запрос LINQ, который выглядит следующим образом:Как LINQ запрос с переменной где и выбрать?

var query = from produkt in Entity.ProduktCollection.produktCollection 
      let p = produkt as Entity.Produkt 

      from version in p.version 
      let v = version as Entity.Version 

      from customer in v.customerCollection 
      let c = customer as Entity.Customer 

      from fehler in v.fehlerCollection 
      let f = fehler as Entity.Fehler 

      where f.id == GetGuid(); 
      select p; 

но то, что мне действительно нужно, это способ сделать f плюс его свойство, а также переменную p, так что я мог бы изменить их к каждому другие возможные комбинации, например:

where c.name == "frank" 
select f; 

или

where p.id == GetGuid2() 
select c; 

есть ли способ achiev Это? Насколько я знаю, нет никакого способа вставить блок-ключ в запрос между from/let -part и where/select -part.

ответ

6

Вы можете создать свой запрос в нескольких операциях, потому что выполнение запросов LINQ отложено. Это относится хорошо к различному Where заявления ситуации:

var querySource = from produkt in Entity.ProduktCollection.produktCollection 
        let p = produkt as Entity.Produkt 
        from version in p.version 
        let v = version as Entity.Version 
        from customer in v.customerCollection 
        let c = customer as Entity.Customer 
        from fehler in v.fehlerCollection 
        let f = fehler as Entity.Fehler 
        select new { p, v, c, f }; 

if(/* first condition */) 
{ 
    querySource = querySource.Where(x => x.f.id == GetGuid()); 
} 
else if(/* second condition */) 
{ 
    querySource = querySource.Where(x => x.p.id = 34); 
} 

var query = querySource.Select(x => x.p); 

Вы можете сделать Select части условного, а также, но потому, что возвращаемой IEnumerable<T> будет отличаться в T частях, вы не сможете назначать их все те же переменное ,

+0

Это здорово, я надеялся, что что-то подобное может сработать! Единственная проблема, которая остается: теперь у меня есть все разные типы внутри моего запроса. Я попытался указать «query = query.Where (x => x.GetType() == T);» но это не работает, есть ли способ сделать это возможным? –

Смежные вопросы