我需要能够在LINQ Expression
查询中使用以下LINQ to Entities
。
目前有这样的房产:
[NotMapped]
public Clinic CurrentClinic
{
get { return AdmissionRoot.CurrentFacility.Compile()(this); }
}
其中称之为:
public static Expression<Func<Admission, Clinic>> CurrentFacility =
a => a.Person.PersonLocations.Any(p => p.Clinic.FacilityType != (int)Clinic.FacilityTypes.CommunityServices)
? a.Person.PersonLocations.Where(p => p.Clinic.FacilityType != (int)Clinic.FacilityTypes.CommunityServices)
.OrderByDescending(l => l.TransferDate)
.ThenByDescending(l => l.LocationId)
.FirstOrDefault().Clinic
: a.Clinic;
问题是我无法在CurrentClinic
语句中使用LINQ to Entities
,因为它会出现以下错误:
“LINQ to中不支持指定的类型成员'CurrentClinic' 实体“
我是LINQ to Entities
表达式的新手,并且希望有人能够重构这一点,以便可以在LINQ to Entities
语句中使用,如下所示:
Db.Admissions.Where(
a =>
(a.CurrentClinic != null
&& !a.CurrentClinic.Company.IsHomeCompany
&& a.ReferralClinicId == clinicid
)
||
(a.CurrentClinic.Company.IsHomeCompany
&& a.CurrentClinic.ClinicId == clinicid
)
);
如果无法在Expression
中完成,我可以“添加”其他标准,那么还有其他方法/建议可以在不影响速度的情况下发挥作用吗?
答案 0 :(得分:0)
这里的问题是因为您在查询中使用CurrentClinic
,这不是实体框架可以变成表达式的东西。运行查询的另一种方法可能是
Db.Admissions
.Select(a => new
{
CurrentClinic = CurrentFacility(a),
Admission = a
})
.Where(a =>
(a.CurrentClinic != null && !a.CurrentClinic.Company.IsHomeCompany && a.Admission.ReferralClinicId == clinicid) ||
(a.CurrentClinic.Company.IsHomeCompany && a.CurrentClinic.ClinicId == clinicid));
注意:这是未经测试但仍应有效。