我有一个返回列表的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子句和调用语句。谢谢你的建议。
答案 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;
}
}