繁体   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