2013-10-15 20 views
1

Я пытаюсь использовать результат одного запроса LINQ как параметр для следующей части запроса LINQ, но чтобы сохранить его в одном общем запросе ,Использование результата одного запроса LINQ в качестве параметра для следующего

Например, мой код (не работоспособный) выглядит следующим образом

List<Categories> myCats = (from city in myCities 
    where city.CityName == myCityName 
    select city 
    from ids in city.IDs 
    where ids != 4 
    select ids).ToList(); 

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

city.IDs является целочисленным массивом

ответ

1

Если вы не на самом деле пытаетесь создать новый прогноз, вы можете просто избежать не используя select до конца.

List<Categories> myCats = (from city in myCities 
    where city.CityName == myCityName 
    //select city 
    from ids in city.IDs 
    where ids != 4 
    select ids).ToList(); 

Я лично, как разбивая мои запросы на куски:

var matchingCities = from city in myCities 
    where city.CityName == myCityName 
    select city; 

var matchingCityIds = (from city in matchingCities 
    from id in city.IDs 
    select id).ToList(); 

Этот подход имеет два основных преимущества:

  1. Имена переменных дают вам автоматическую «документацию», позволяя другим разработчикам чтобы понять, каковы намерения каждой трансформации.
  2. Легче отлаживать, потому что вы можете перешагнуть через каждое преобразование и убедиться, что получили нужные вам результаты.

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

List<Categories> myCats = (from city in myCities 
    where city.CityName == myCityName 
    // Not typically recommended 
    select city.IDs into cityIDs 
    from id in cityIDs 
    where id != 4 
    select id).ToList(); 
+0

Perfect - спасибо :) – Nodoid

+0

@Nodoid: Если это работает для вас, идти вперед и отметьте ответ, чтобы другие люди не думаю, что вы по-прежнему нуждаются в помощи. – StriplingWarrior

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