将列表传递给 Linq 查询

问题描述 投票:0回答:3

我有一个返回列表的 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 子句和调用语句。我怎样才能做到这一点?

c# linq linq-to-sql
3个回答
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();
    }
}

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,这可能是一个昂贵的举动。


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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.