Является ли цикл for ... each лучшим способом извлечь список примитивов из IQueryable пользовательских объектов? - PullRequest
0 голосов
/ 11 ноября 2011

Например, если у меня были объекты IQueryable of Person и у каждого Person был идентификатор возраста, и я хотел сделать еще один запрос, который выбрал бы все строки в таблице, содержащей целочисленный идентификатор, который был в этом IQueryable из идентификаторов ...

Могу ли я использовать что-то подобное?

List<int> AgeList = new List<int>();

foreach(Person p in Persons)
{
    AgeList.Add(p.Age);
}

var ageStats = from a in db.Ages
                where AgeList.Contains(a.Age)
                select a;

Или что может быть лучше, чтобы мне не нужно было зацикливаться?

Спасибо

Ответы [ 3 ]

1 голос
/ 11 ноября 2011

Звучит так, будто вы хотите выполнить соединение. Так как вы упомянули, что Persons - это IQueryable, он также поступает из базы данных?

Либо join, либо SelectMany (что означает объединение в LINQ to SQL).

Регистрация:

var ageStats = from a in db.Ages
               join p in db.Persons on a.Age equals p.Age
               select a;

SelectMany:

var ageStats = from a in db.Ages
               from p in db.Persons
               where a.Age == p.Age
               select a;
0 голосов
/ 11 ноября 2011
var ageStats = from a in db.Ages
               where Persons.Select(p => p.Age).Contains(a.Age)
               select a;
0 голосов
/ 11 ноября 2011

Вы можете сделать

List<int> AgeList = Persons.Select(p => p.Age);

Тем не менее, даже если страница msdn для .Select ничего не говорит, я почти уверен, что .Select все еще является циклом, поэтомуВы действительно не получите никакой производительности, написав это так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...