2011-04-04 41 views
3

我有我建立的構圖方式,看起來像這樣的一個對象模型:填充有多個對象列表查詢

MyModel{ 
    public int ModelID {get;set;} 
    public List<OtherModel1> ListOfOtherModel {get;set;} 
    public List<OtherModeln> ListOfOtherModels {get;set;} 
    ... 
} 

我有一個LINQ到SQL查詢返回ModelID和我的列表將此集合作爲輸入參數傳遞給其他查詢以填充OtherModels對象的列表;這些對象通過ModelID與MyModel相關。當這些查詢結束時(我有9個查詢),我結束了10個列表。

我傳遞這10名名單(ListOfMyModel和其他9:ListOfOtherModel1,ListOfOtherModels ...)到會通過循環throught的ListOfMyModel和查詢其他每個列表看到建立爲MyModel的集合另一個功能如果它們包含具有相同ModelID的列表。

正如我所做的那樣,我只是想知道是否有更簡單/更快/更好的方法來做到這一點。感謝您的建議。

+0

你有沒有考慮在列表上使用列表上的泛型類型接口,然後將所有結果注入到一個列表中?從您的示例中不清楚關聯列表中的結果是否具有模型。 – Pepto 2011-04-04 02:10:39

+0

你能告訴我一些代碼它可能是什麼樣子嗎? – frenchie 2011-04-04 02:25:13

+0

通過「查詢每個其他列表來查看它們是否包含列表」,您究竟意味着什麼? – smartcaveman 2011-04-04 04:26:55

回答

0

如果他們有一個公共的基類,那麼在執行查詢之前,您將該集合轉換爲集合,然後與它們中的每一個進行聯合。

例如,假設Derived1Derived2有共同的基類CommonBaseClass

IEnumerable<CommonBaseClass> Merge(List<Derived1> derived1list, List<Dervived2> derived2list){ 
     return derived1list.Cast<CommonBaseClass>().Union(derived2list.Cast<CommonBaseClass>()); 
} 

所以,你可以只合並所有的名單,然後在大CommonBaseClass集合進行查詢,而不是查詢每個單獨再加入他們。

我認爲這是你正在尋找的東西,但你的問題不是非常明確。如果你發佈了一些代碼,它會更容易幫助你。

它也似乎你可能正在尋找SelectMany擴展方法,但我不知道,因爲語言不清楚。

+0

聯合<>()和Concat <>()在這方面有什麼區別? – sehe 2011-04-04 08:44:44

+0

聯合刪除重複。 Concat不.http://stackoverflow.com/questions/1337699/which-is-faster-union-or-concat-c-linq – smartcaveman 2011-04-04 09:28:40