[英]LINQ query for finding Parent by Child
我是EF \\ LINQ的新手。 如何在LINQ中重写此类sql查询:
SELECT Pacient_ID FROM VisitDates WHERE ID in
(SELECT visitDate_ID from Reviews WHERE comments LIKE N'%name%')
问题是我无法在LINQ查询中访问由EF创建的列(visitDate_ID,Pacient_ID),但是我尝试这样做,但速度很慢:
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;
}
}
}
谢谢!
用以下这一行替换foreach的嵌套:
var found =(from p in pacients where p.visits.Any(date=>date.reviews.Any
(r=>r.comments.ToLower().Contains(name.ToLower()))
select p).ToList();
这将执行您的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"))));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.