2010-11-22 3 views
2

Я новичок в linq. До сих пор я в основном использовал linqTOsql следующим образом: MyRepository.Mytable.Where(x => x.id == 2).В linq, как мне взять конкретный параметр из списка и создать новый список другого типа?

Мне интересно, как взять список из этого типа запроса и поместить конкретный параметр в новый простой список, например List<long>.

Так я получаю мои записи, как это:

List<Entry2Cats> e2c = genesisRepository.Entry2Cats.Where(x => x.streamEntryID == id).ToList() 

И я хочу, чтобы получить идентификатор категории параметра Я для каждого элемента в e2c таким образом я могу переместить его в List<long>.

Obvisouly, это можно сделать достаточно просто с foreach:

 List<Entry2Cats> e2c = genesisRepository.Entry2Cats 
           .Where(x => x.streamEntryID == id) 
           .ToList(); 
     List<long> e2cCatIDs = new List<long>(); 

     foreach (Entry2Cats item in e2c) 
     { 
      e2cCatIDs.Add(item.catID); 
     } 

Можно ли это сделать, используя только LINQ? Если это возможно, я должен с ним побеспокоиться или это foreach так же хорошо?

ответ

6
List<long> ids = genesisRepository.Entry2Cats 
       .Where(x => x.streamEntryID == id) 
       .Select(a => a.catID) 
       .ToList(); 

Просто используйте, чтобы получить только идентификаторы.

+0

Ах да ... это имеет смысл, что вы можете утверждения строки LINQ, как что. Есть ли какая-либо польза (кроме сжатого кода) для использования этой техники, а не foreach? – quakkels 2010-11-22 16:22:38

1
List<long> e2cCatIDs = e2c.Select(e => e.catID).ToList(); 

или выбрать непосредственно в запросе

List<long> e2cCatIDs = (from x in genesisRepository.Entry2Cats 
         where x.streamEntryID == id 
         select x.catID).ToList(); 
2

< Список Длинные > E2c = genesisRepository.Entry2Cats

      .Where(x => x.streamEntryID == id) 
          .Select(x => x.catID) 
          .ToList(); 
Смежные вопросы