簡體   English   中英

LINQ查詢以按孩子查找父母

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM