linq查询:列表作为输入参数

时间:2011-03-31 02:55:41

标签: c# linq

假设我们有2个对象模型:

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 个答案:

答案 0 :(得分:3)

如果您只是想在之后的某个时间点制作MyModel2每个MyModel1的副本,那么这很简单:

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

如果您需要查询具有与MyModel1对象相同的ID的MyModel2对象的数据上下文(即,存在关系),那么它是不同的(但您应该提供该信息)。

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

答案 1 :(得分: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();

答案 2 :(得分:1)

假设您正在寻找现有Model2的子集,您可以使用以下内容:

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

“join”函数类似于SQL中的内部联接,并且不会返回任何没有匹配的t2。

有一个相当详细的连接描述和什么在: http://msdn.microsoft.com/en-us/library/bb397941.aspx#Y275