我有一个返回列表的 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 子句和调用语句。我怎样才能做到这一点?
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();
}
}
为了将其完全保留在查询语法中,它会是这样的:
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,这可能是一个昂贵的举动。
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;
}
}