2012-05-10 3 views
1

У меня есть следующие:Есть ли способ объединить эти два оператора LINQ?

var data = _cityRepository.GetAll(
    u => u.PartitionKey == pk & 
    u.RowKey.CompareTo(lowerBound) >= 0 & 
    u.RowKey.CompareTo(upperBound) < 0); 

details = 
    from d in data 
    select new City.Grid 
    { 
     PartitionKey = d.PartitionKey, 
     RowKey = d.RowKey, 
     ShortTitle = d.ShortTitle, 
     Created = d.Created, 
     Modified = d.Modified, 
     ModifiedBy = d.ModifiedBy 
    }; 

detailsList = details 
    .OrderBy(item => item.Modified) 
    .Select((t, index) => new City.Grid() 
    { 
     PartitionKey = t.PartitionKey, 
     RowKey = t.RowKey, 
     Row = index + 1, 
     ShortTitle = t.ShortTitle, 
     Created = t.Created, 
     Modified = t.Modified, 
     ModifiedBy = t.ModifiedBy 
    }) 
    .ToList(); 

Проблема для меня в том, что я не уверен, как совместить второй, как он использует это:

Select((t, index) => new City.Grid() 

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

+0

Есть три утверждения здесь, а не два. И, учитывая их простую структуру, вы можете присоединиться ко всем трем вместе ни с чем более интересным, чем простой поиск и замена. – Jon

ответ

3

Конечно - это некрасиво, но это имеет все три:

var query = _cityRepository.GetAll(
           u => u.PartitionKey == pk & 
           u.RowKey.CompareTo(lowerBound) >= 0 & 
           u.RowKey.CompareTo(upperBound) < 0) 
       .Select(d => new City.Grid 
         { 
          PartitionKey = d.PartitionKey, 
          RowKey = d.RowKey, 
          ShortTitle = d.ShortTitle, 
          Created = d.Created, 
          Modified = d.Modified, 
          ModifiedBy = d.ModifiedBy       
         } 
       .OrderBy(item => item.Modified) 
       .Select((t, index) => new City.Grid() 
       { 
        PartitionKey = t.PartitionKey, 
        RowKey = t.RowKey, 
        Row = index + 1, 
        ShortTitle = t.ShortTitle, 
        Created = t.Created, 
        Modified = t.Modified, 
        ModifiedBy = t.ModifiedBy 
       }) 
       .ToList(); 

Было бы более разумным, чтобы избежать создания новых City.Grid объектов дважды:

var query = _cityRepository.GetAll(
           u => u.PartitionKey == pk & 
           u.RowKey.CompareTo(lowerBound) >= 0 & 
           u.RowKey.CompareTo(upperBound) < 0) 
       .OrderBy(item => item.Modified) 
       .Select((t, index) => new City.Grid() 
       { 
        PartitionKey = t.PartitionKey, 
        RowKey = t.RowKey, 
        Row = index + 1, 
        ShortTitle = t.ShortTitle, 
        Created = t.Created, 
        Modified = t.Modified, 
        ModifiedBy = t.ModifiedBy 
       }) 
       .ToList(); 
+0

Спасибо, Джон. Последнее было тем, что я искал, но я не знал, как все это сделать. Я дам ему попробовать. –

+0

jon, в синтаксисе запроса -, может ли 'in' помочь здесь? (я думаю, что он должен быть преобразован в синтаксис запроса ... [все 3 запроса]) –

+1

@Royi Namir: Нет. В выражениях запроса нет синтаксиса для перегрузки select, который предоставляет индекс проекции. –

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