2013-10-15 61 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是一個int數組

回答

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

完美 - 謝謝:) – Nodoid

+0

@Nodoid:如果這對您有用,請繼續並標記答案,以便其他人不認爲您仍需要幫助。 – StriplingWarrior

相關問題