Альтернативное кодирование к условному var запроса выведенного типа LINQ to XML? - PullRequest
0 голосов
/ 28 апреля 2011

Это продолжение связанной темы, найденной здесь. https://stackoverflow.com/questions/1987485/conditionally-assign-c-var-as-elegant-as-it-gets

если я делаю следующее:

  var query = (SearchString == "" ?
    (
         from MEDIA in xdoc.Descendants("MEDIA")
                    select new
                    {
                        PLAY = MEDIA.Element("PLAY").Value,
                        PIC = MEDIA.Element("PIC").Value,
                        TTL = MEDIA.Element("TTL").Value
                    }
    ):


        from MEDIA in xdoc.Descendants("MEDIA")
                    where MEDIA.Element("TTL").ToString().ToLower().Contains(SearchString)
                    select new
                    {
                        PLAY = MEDIA.Element("PLAY").Value,
                        PIC = MEDIA.Element("PIC").Value,
                        TTL = MEDIA.Element("TTL").Value
                    }
    ) ;

Как бы я объявил тип запроса, чтобы сделать его статическим на уровне класса?

В качестве альтернативы, в цитируемом сообщении Марк Гравелл указывает на другой подход

IQueryable<Part> query = db.Participant;
if(email != null) query = query.Where(p => p.EmailAddress == email);
if(seqNr != null) query = query.Where(p => p.SequenceNumber == seqNr);
...

Как мне объявить / перекодировать запрос в моем случае? Вот мои дикие попытки:)

   IEnumerable<XElement> query = xdoc.Descendants("MEDIA");
    if (SearchString != "" )
        query = query.Where(m => m.Element("TTL").ToString().ToLower().Contains(SearchString));

Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2011

Как бы я объявил тип запроса, чтобы сделать его статическим на уровне класса?

Ты не можешь. Анонимные типы, ну, в общем, анонимные ... поэтому у них нет имени, которое вы можете использовать для объявления переменных. Ваш запрос имеет тип IEnumerable<something>, но вы не можете сослаться на something в своем коде. Поэтому вам нужно создать определенный класс, который будет представлять результаты вашего запроса, и использовать его вместо анонимного типа.

...