C # IQueryable <T>мой код имеет смысл? - PullRequest
1 голос
/ 04 мая 2010

Я использую это, чтобы получить список материалов из моей базы данных ....

  public IQueryable<MaterialsObj> FindAllMaterials()
    {
       var materials =  from m in db.Materials
           join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
           select new MaterialsObj()
               {
                   Id = Convert.ToInt64(m.Mat_id),
                   Mat_Name = m.Mat_Name,
                   Mes_Name = Mt.Name,
               };
        return materials;
    }

Но я видел в примере, который имеет это,

public IQueryable<MaterialsObj> FindAllMaterials()
{
   return from m in db.Materials
       join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
       select new MaterialsObj()
           {
               Id = Convert.ToInt64(m.Mat_id),
               Mat_Name = m.Mat_Name,
               Mes_Name = Mt.Name,
           };
}

Есть ли действительно большая разница между этими двумя методами ... Назначение моего запроса linq переменной и его возврат ... Это хорошая / плохая практика? Любое предложение, которое я должен использовать?

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

Нет реальной разницы. В релизной / оптимизированной сборке я бы ожидал, что компилятор все равно удалит лишнюю локальную версию. Наличие переменной полезно, если вы хотите установить точку останова и проверить значение до возврата или если вы хотите применить дополнительную условную фильтрацию, например:

if(applySort) { materials = materials.OrderBy(x => x.Name); }

В вашем примере это ничего не добавляет , но также ничего не стоит . Не стесняйтесь держать это там; особенно если вы думаете, что это облегчает чтение кода.

1 голос
/ 04 мая 2010

Нет никакой разницы, но обычно я использую первую версию, которая упрощает настройку часов или точки останова в visual studio, если я хочу посмотреть на данные до того, как они будут возвращены.

...