首先我要感谢那些花时间帮助我的人。在这个例子中,假设我的数据库中有以下表格。
------------
tPerson
____________
ID | AGE | countryID
------------
tPet
____________
ID | personID
-----------
tCountry
___________
ID | Name
我想知道如何使用linq编写下一个查询(但是使用扩展方法)
SELECT tCountry.ID, tCountryName,
SUM(CASE WHEN(tPeople.Age <20 && subQ.hasPets = 0) THEN 1 ELSE 0) AS first,
SUM(CASE WHEN(tPeople IN (20,21,22,23,24,25) && subQ.hasPets > 0) THEN 1 ELSE 0) AS second,
SUM(CASE WHEN(tPeople.Age > 25) THEN 1 ELSE 0) AS third
FROM tPeople
LEFT JOIN (
SELECT tPeople.ID, COUNT(tPet.ID) AS hasPets
FROM tPeople INNER JOIN tPet ON tPet.PersonID = tPeople.ID
GROUPBY tPeopleID
) AS subQ
ON subQ.ID = tPeople.ID
LEFT JOIN tCountry ON tPeople.countryID = tCountry.ID WHERE tCountry.ID = XX
GROUP BY (tCountry.ID, tCountryName)
提前谢谢!
1条答案
按热度按时间nhjlsmyf1#
为了便于阅读和理解,我把它们分开了
但如果你问我,我建议你用
Raw SQL Query
或者Dapper
在这种情况下因为在我看来,它简单、更优化、更快
而且,据我所知,当linq查询(to sql)很复杂时,它不会生成最佳的sql查询
如果你想用
Window Functions()
以及Sql.Ext.
,我觉得这种情况下它不是很有用,但是如果你想,首先请改变你的想法SQL Query
使用window function()
在里面