2011-10-20 46 views
0

我試圖做使用LINQ的方式,以避免在一個DataSet做了一個數據行的foreach:LINQ和試圖加入一個let語句導致

var results = from dataRow in DataRows 
       let MoreData = func(dataRow.ID) 
       join moreDataRow in MoreData on dataRow.ID2 = moreDataRow.ID2 
       select new 
       { 
        ID1 = dataRow.ID, 
        ID2 = dataRow.ID2, 
        ID3 = dataRow2.ID3 
       }; 

我想做到像上面,但linq不能使用MoreData作爲連接語句的一部分。如果我無法做到這一點,我可能會僅僅對DataRows進行一次foreach,然後從那裏開始。

有沒有一種linqy方式來加入數據,直到遍歷一個元素,然後執行從原始數據連接到上面新生成的數據將不可用?

+0

MoreData是什麼類型? – StriplingWarrior

+0

我相信你可以直接加入你的func的輸出:func(dataRow.Id).Join(....)或者包裝它(從... let MoreData = func(dataRow.ID)select更多數據)。加入(...)編輯,這個評論沒有任何意義,請忽略和閱讀威武的雙向飛碟 – Polity

回答

6

A join子句必須採取一個完整的集合 - 而不是取決於當前行。您可以使用多個from聲明:

var results = from dataRow in DataRows 
       from moreDataRow in func(dataRow.ID) 
       where dataRow.ID2 == moreDataRow.ID2 
       select new 
       { 
        ID1 = dataRow.ID, 
        ID2 = dataRow.ID2, 
        ID3 = dataRow2.ID3 
       }; 
+0

我想這是有道理的。這似乎是合理的,它可以讓我使用這個臨時收藏加入。 – ShelbyZ