我是EF \ LINQ的新手。如何在LINQ中重写此类sql查询:
SELECT Pacient_ID FROM VisitDates WHERE ID in
(SELECT visitDate_ID from Reviews WHERE comments LIKE N'%name%')
问题是我无法访问EF在LINQ查询(visitDate_ID,Pacient_ID)中由EF创建的列,但我尝试这样做,但速度很慢:
List<Pacient> found = new List<Pacient>();
List<Pacient> pacients = db.Pacients.Include(p => p.visits.Select(w => w.reviews)).ToList();
bool k = false;
foreach (Pacient p in pacients)
{
foreach (VisitDate date in p.visits)
{
foreach (Review r in date.reviews)
{
if (r.comments.ToLower().Contains(name.ToLower()))
{
found.Add(p);
k = true;
break;
}
}
if (k)
{
k = false;
break;
}
}
}
谢谢!
这将执行您的SQL查询所要求的:
var results=db.VisitDates
.Where(vd=>vd.Reviews.Any(r=>r.comments.Contains("name")))
.Select(vd=>vd.Pacient_ID);
通常不需要.ToLower()东西,因为比较是由数据库处理的,默认情况下,它不区分大小写,并且添加它们可能会使查询运行明显变慢。
如果您想要专家,那就是:
var results=db.Pacients
.Where(p=>p.VisitDates.Any(vd=>vd.Reviews.Any(r=>r.comments.Contains("name"))));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句