将列表传递给linq查询

时间:2011-04-01 19:45:28

标签: c# linq linq-to-sql

我有一个返回列表的linq查询,结果如下:

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

此列表的类型为MyModel:

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

现在我要做的是将此列表传递给名为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子句和调用语句。谢谢你的建议。

3 个答案:

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

答案 1 :(得分: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(AsEnumerable())上投入MyDC.Table.AsEnumerable(),或者完全重新考虑您的查询。 AsEnumerable会将整个表放入内存,然后从那时起使用LINQ to Objects,这可能是一个昂贵的举动。

答案 2 :(得分: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;
    }
}