编写使用LINQ case语句(与GRO​​UP BY)语句、case、LINQ、BY

2023-09-06 05:04:06 作者:爱情、我们黑名单见∞

我真的很挣扎LINQ。我写我的查询在SQL(实际上它是一个支点),并尝试写在LINQ等效声明。任何指针前进将是非常美联社preciated。为code见下:

I'm really struggling with LINQ. I've written my query out in SQL (in effect it's a pivot), and trying to write an equivalent statement in LINQ. Any pointers forward would be much appreciated. See below for code:

SELECT b.URL,
SUM(CASE WHEN (a.ExtFlag = 0) THEN 1 ELSE 0 END) AS IntLinks,   
SUM(CASE WHEN (a.ResponseCode >= 400 AND a.ExtFlag = 0) THEN 1 ELSE 0 END) AS IntBroken,
SUM(CASE WHEN (a.ExtFlag = 1) THEN 1 ELSE 0 END) AS ExtLinks,   
SUM(CASE WHEN (a.ResponseCode >= 400 AND a.ExtFlag = 1) THEN 1 ELSE 0 END) AS ExtBroken
FROM Link a
INNER JOIN Host b
ON a.HostID = b.ID
GROUP BY b.URL
ORDER BY b.URL

非常感谢。

推荐答案

我想这应该做你想要什么 - 它至少值得一试:

I think this should do what you want - it's at least worth a try:

var query = from link in db.Links
            join host in db.Hosts on link.HostID equals host.ID
            group link by host.Url into links
            select new
            {
                Url = links.Url,
                IntLinks  = links.Count(link => link.ExtFlag == 0),
                IntBroken = links.Count(link => link.ExtFlag == 0 &&
                                                link.ResponseCode >= 400),
                ExtLinks =  links.Count(link => link.ExtFlag == 1),
                ExtBroken = links.Count(link => link.ExtFlag == 1 &&
                                                link.ResponseCode >= 400),
            };