请原谅我,如果以前曾经问过这个问题,但我不确定究竟会问我的问题,这会让搜索变得困难。
我目前有以下LINQ查询(使用linq到实体):
results = (from r in query
select new PatientReport
{
Report = r,
Patient = (from patient in database.PatientSet
where patient.IsActive && patient.Account == r.Account
select patient).FirstOrDefault()
}).ToList();
现在这很好用,linq-to-entities从它产生一个连接查询,所有都是花花公子。但是,我注意到在我的代码的其他几个部分中,我有以下内容:
(from patient in database.PatientSet
where patient.IsActive && patient.Account == r.Account
select patient).FirstOrDefault()
现在,我的问题是: 是否可以使代码与第一个代码段的行为相同,但看起来像这样:
results = (from r in query
select new PatientReport
{
Report = r,
Patient = database.GetActivePatient(r.Account)
}).ToList();
并且在Database类中(或者也许在Patient中,或者可能作为扩展方法),有一个函数可以汇编以下查询(显然不会执行它,因为它不能作为其他的一部分运行)查询):
public xx GetActivePatient(string account)
{
return (from patient in database.PatientSet
where patient.IsActive && patient.Account == r.Account
select patient).FirstOrDefault()
}
虽然我知道GetActivePatient的签名可能会非常毛茸茸,并且充满了IQueryable或IExpression等。
实际上我正在尝试创建一个创建查询的函数,该查询可以用作其他查询的一部分。
任何帮助(即使它是'不,这是不可能')表示赞赏。感谢。
答案 0 :(得分:0)
您可以使用扩展功能,如下所示:
private Func<DataClasses, String> FunctionName(string account)
{
return (from patient in database.PatientSet
where patient.IsActive && patient.Account == r.Account
select patient).FirstOrDefault()
}
答案 1 :(得分:-1)
ToString()类型扩展方法的示例:
public static IEnumerable<string> ToString<T>(this IEnumerable<T> list)
{
return list.Select(t => t.ToString());
}
现在可以在类似的东西中使用。
List<string> patientStrings = (from patient in database.PatientSet
where patient.IsActive && patient.Account == r.Account
select patient).ToString().ToList();
(我真的不知道最后的语法是否正确,因为我从不用'from'关键字编写Linq语句,我使用lambdas。)
如果我正确翻译,那将是:
List<string> patientStrings = database.PatientSet
.Where(patient => patient.IsActive && patient.Account == r.Account)
.ToString()
.ToList();