简体   繁体   English

如何将此 SQL 查询重写为 LINQ 或 EF 对象查询

[英]How to rewrite this SQL query as LINQ or EF Object Query

How would you rewrite this in LINQ or using an EF Object Query?您将如何在 LINQ 或使用 EF 对象查询中重写它?

select r.UserName,  
    (select count(*) from tbl1 where UserName = r.UserName) as tbl1Count,
    (select max(CreatedDate) from tbl2 where UserName = r.UserName) as tbl2Date,
    (select max(SomeDate) from tbl3 where UserName = r.UserName) as tbl3Date,
    max(r.DateRegistered) as SomeDate           
from sometable r 
group by r.UserName

Try this query试试这个查询

var objlist = (
    From a in Contex.UserName
    From b in Contex.tbl1.where(x=>x.UserName==a.UserName).DefaultEmpty()
    From c in Contex.tbl2.where(x=>x.UserName==a.UserName).DefaultEmpty()
    From d in Contex.tbl3.where(x=>x.UserName==a.UserName).DefaultEmpty()
    group a by a.UserName into pg       
    Select new {
        UserName = pg.UserName,tbl1count=pg.Count(x=>x.tbl1id)
        ,tbl2Date = pg.max(x=>x.CreatedDate)
        ,tbl3Date = pg.max(x=>x.SomeDate)
        ,SomeDate = pg.max(x=>x.DteRegistered)
}).ToList();

Please Try the following code请尝试以下代码

StackOverflowEntities db = new StackOverflowEntities();

        var result = (from p in db.SomeTables
                     join q in db.Table_1 on p.UserName equals q.UserName into Q
                     from q in Q.DefaultIfEmpty()
                     join r in db.Table_2 on p.UserName equals r.UserName into R
                     from r in R.DefaultIfEmpty()
                     join s in db.Table_3 on p.UserName equals s.UserName into S
                     from s in R.DefaultIfEmpty()
                     group new { p, q, r, s } by p.UserName into g
                     select new
                     {
                         UserName = g.Key,
                         tbl1Count = g.Count(w => w.q != null),
                         tbl2Date = g.Max(w => w.r.CreatedDate),
                         tbl3Date = g.Max(w => w.s.SomeDate),
                         SomeDate = g.Max(w => w.p.DateRegistered)
                     }).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM