2011-04-01 99 views
2

我有一个LINQ查询返回一个列表,结果是这样的:传球列表LINQ查询

protected void Page_Load(object sender, EventArgs e) 
{ 
    var MyList = GetPatientsFromDB(TheUserID); 
} 

此列表类型为MyModel的是这样的:

MyModel 
{ 
public int PatientID {get;set;} 
} 

现在我“M希望做的是这个列表传递给一个名为GetPatientInfo功能和返回的MyOtherModel

MyOtherModel{ 
public int PatientID {get;set;} 
public string Name {get;set;} 
public string Region {get;set;} 
} 

另一份名单,我有写第二个函数有些问题。

我开始与

public static List<MyOtherModel> GetPatientInfo(List<MyModel> 
{ 

using (..... MyDC = new... DataContext) 

{ 
    var OutputList = from f in MyDC.Table 
         where......? 

} 

我卡上写的where子句和调用语句。感谢您的建议。

回答

4
public static List<MyOtherModel> GetPatientInfo(List<MyModel list> 
{ 
    using (..... MyDC = new... DataContext) 
    { 
     var result = from f in MyDC.Table 
        where list.Select(m => m.PatientID).Contains(f.PatientID) 
        select f; 

     return result.ToList(); 
    } 
} 
+0

或许更好地使用临时变量来保存'list.Select(...)'以避免多次执行......不确定LINQ-to-SQL提供程序是否会自动缓存该值。 – 2011-04-02 08:50:58

+0

@Stephen:你是什么意思? – frenchie 2011-04-02 19:00:27

+0

他说要做'var patients = list.Select(m => m.PatientID)',然后对其执行'Contains()'调用。 – hunter 2011-04-02 21:31:38

1
public static List<MyOtherModel> GetPatientInfo(List<MyModel> patients) 
{ 

    using (..... MyDC = new... DataContext) 
    { 
     var OutputList = from f in MyDC.Table 
         where patients.Any(p => p.PatientID == f.PatientID) 
         select f; 
    } 
} 
+1

我得到“本地序列不能用于查询运算符的LINQ to SQL实现,但Contains运算符除外”。 – frenchie 2011-04-01 20:03:26

+0

啊,Linq2Sql在它的支持上有限。我相信亨特的榜样应该为你工作。 – 2011-04-01 20:17:29

2

要查询语法完全保留它,它会是这样的:

var OutputList = from f in MyDC.Table 
    from m in list 
    where f.PatientId == m.PatientId 
    select f; 

然而,这是否实际工作与否取决于你使用的是什么LINQ提供程序。这是LINQ To SQL吗?对象?实体?取决于这是哪个提供者,它可能没有可支持此查询的幕后实现。如果是这种情况,您可能会被迫在MyDC.Table(MyDC.Table.AsEnumerable())上抛出AsEnumerable(),或者完全重新考虑您的查询。 AsEnumerable会将整个表格放入内存中,然后从这一点开始使用LINQ to Objects,这可能是一个昂贵的举措。