2011-03-31 61 views
2

比方說,我們有2個對象模型:LINQ查詢:列表作爲輸入參數

class MyModel1{ 
    int ModelID {get;set;} 
    string Var2 {get;set;} 
} 

class MyModel2{ 
    int ModelID {get;set;} 
    string Var2 {get;set;} 
} 

比方說,我們有一個LINQ to SQL的查詢,返回這樣MyModel1的列表:

var OutputModel1 = from t in MyDataContext 
      where... 
      select new MyModel1 
      {...}.ToList(); 

Return OutputModel1 as List<MyModel1>; 

現在我已經有了這個列表,我想把這個列表傳遞給另一個查詢,它將返回ModelID相同的MyModel2列表。

讓我知道如果你有關於如何做到這一點的一些建議。

謝謝。

回答

3

如果你只是想使每個MyModel1MyModel2副本某一點之後,那麼它很簡單:

var OutputModel2 = OutputModel1.Select(m => 
    new MyModel2 { 
     ModelId = m.ModelId, 
     Var2 = m.Var2, 
    }).ToList(); 

如果您需要查詢那些MyModel2用相同的ID作爲MyModel1對象的數據上下文對象(即,有關係),那麼它是不同的(但你應該提供這些信息)。

PS:沒有必要寫as List<MyModel1> - ToList的返回值恰好是List<MyModel1>,不多也不少。

+0

您可能必須將其連接到數據上下文或東西,使跟蹤。 – Slappy 2011-03-31 03:03:01

+0

@Slappy:取決於「MyModel2」究竟是什麼。這個問題沒有說。 – Jon 2011-03-31 03:05:01

+0

是啊,我只是說因爲他在問題中提到了MyDataContext – Slappy 2011-03-31 03:36:43

1
var OutputModel2 = (from m in MyDataContext.Model2Collection where MyDataContext.Model1Collection.Any(x => x.ModelID == m.ModelID && x.Var2 == 3/*PUT YOUR WHERE CLAUSE HERE*/)).ToList(); 
1

假設你正在尋找的現有模型2的一個子集,你可以使用類似以下內容:

var OutputModel2 = from t2 in CollectionOfModel2s 
          join t1 in OutputModel1 on t2.ModelID equals t1.ModelID 
          select t2; 

「加入」之類的內部功能加入SQL,並榮獲」 t返回任何沒有匹配的t2。

有一個比較詳細的說明連接和諸如此類的東西在: http://msdn.microsoft.com/en-us/library/bb397941.aspx#Y275