[英]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.