2013-07-27 3 views
4

Я понимаю, что есть два разных способа написать код LINQ. Может ли кто-нибудь показать мне два пути для этого простого блока кода. Который является наиболее часто используемым или считается наиболее легким для отладкиКакими двумя способами я могу написать этот оператор с LINQ?

var subTopics = _subTopicService.GetSubTopics(Id); 
    var subTopicsSelect = (from subTopic in subTopics 
      select new 
      { 
       id = subTopic.SubTopicId, 
       name = subTopic.Name 
      }); 
+0

этот вопрос звучит очень знакомо мне, я читал это где-то в stackoverflow? –

+0

1 способ использует 'Query expression', другой использует' Query method', однако 'Query method' может решить большую часть вашей работы, в то время как' Query expression' просто для удобства в некоторых простых случаях. –

ответ

3

Поскольку ваш запрос состоит исключительно из пункта from и select, все, что вам нужно сделать, чтобы преобразовать это свободно синтаксис вызова .Select.

В беглом синтаксисом, который был бы:

var subTopicsSelect = subTopics.Select(x => 
    new 
    { 
      id = x.SubTopicId, 
      name = x.Name 
    }); 

Дополнительная литература

2

Вы отобразили первый путь "SQL-подобный синтаксис" второй будет «синтаксис лямбда»:

subTopics.Select(s => new { id = s.SubTopicId, name = s.Name }); 
0

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

var emailsToSend = db.emailQueues.Where(
      e => e.sent == false 
     ).Take(5); 


    var emailsToSend2 = from e2 in db.emailQueues 
          .Take(5) 
          .Where(
          e => e.sent == false 
         ) 

         select e2; 

Они оба, кажется, делать то же самое, но я предпочитаю синтаксис первого метода. Его легче запомнить.

+0

Они не делают то же самое, что и вы меняли порядок Take and Where. Если учесть это, то ваша вторая версия - это просто знаменитый 'from x in source select x', который может быть заменен на' source'. – Dirk

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