2014-01-30 96 views
2

我正在使用System.Linq.Dynamic,版本爲github's repository在select子句中選擇嵌套集合的屬性

我對NON System.Linq.Dynamic解決方案不感興趣。

我想在嵌套集合的屬性上執行選擇。讓我們想象我們有以下情況:

public class Region 
{ 
    public int Id { get; set; } 
    public List<Town> Towns { get; set; } 
} 
public class Town 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

是否有可能'選擇'地區的ID和它的城鎮名? 東西種:

someListofRegions.Select("new(Id, Towns.Name)") 

其中"new(Id, Towns.Name)"是動態LINQ表達式。

當然上面的例子都失敗了。

+0

你有沒有找到這方面的解決方案?我處於相同的情況 – Javier

回答

-1

您無法對嵌套集合的屬性執行選擇,因爲這需要展平所得集合。

通常,使用的SelectMany()來做到這一點扁平化,但由於要使用System.Linq.Dynamic,我不相信這個庫具有動態的SelectMany()這可能是不可能的。你可以編寫你自己的SelectMany(),儘管使用表達式樹不應該太難。

另外,您可能會發現GroupBy更適合您的需求,無論如何,我無法親自看到希望收集區域ID和城鎮名稱的好處 - 會有大量重複的區域ID。

+0

SelectMany不需要,你可以只寫Select(region => new {region.Id,region.Towns.Select(t => t.Name)) - 但是沒有' dynamic'bits – ITmeze

+0

對於遲到的回覆感到抱歉,但您在那裏寫的代碼會返回與GroupBy()返回的類似的匿名類型集合。它不會返回地區ID和城鎮名稱的扁平列表,這是我相信他在問題中所要求的。 這就是爲什麼我建議他可能需要GroupBy()而不是Select() – jcharlesworthuk