[英]LINQ Complex Query
我有一个复杂的SQL查询,需要在LINQ中运行。 我想知道是否可以使用LINQ做到这一点,或者我还需要其他东西吗? 请你帮助我好吗? 谢谢。
SELECT DISTINCT_PLAY_COUNT,SUM(1) AS CLIENT_COUNT FROM
(SELECT CLIENT_ID,SUM(1) AS DISTINCT_PLAY_COUNT FROM
(SELECT CLIENT_ID,SONG_ID FROM PIEXHIBIT
WHERE PLAY_TS >= '10/08/2016 00:00:00' AND PLAY_TS <= '10/08/2016 23:59:59'
GROUP BY CLIENT_ID,SONG_ID
)
GROUP BY CLIENT_ID
)
GROUP BY DISTINCT_PLAY_COUNT
这是我的课程以及到目前为止我所取得的成就;
public class Exhibit
{
public string PLAY_ID { get; set; }
public Int32 SONG_ID { get; set; }
public Int32 CLIENT_ID { get; set; }
public DateTime PLAY_TS { get; set; }
}
var sql = from Exhibit row in Exhibit
where row.PLAY_TS >= DateTime.Parse("10/08/2016 00:00:00") && row.PLAY_TS <= DateTime.Parse("10/08/2016 23:59:59")
select new { row.CLIENT_ID, row.SONG_ID };
Exhibits
.Where(t => t.PLAY_TS >= new DateTime(2016, 8, 10) && t.PLAY_TS < new DateTime(2016, 8, 11))
.Select(t => new { t.CLIENT_ID, t.SONG_ID })
.Distinct()
.GroupBy(c => c.CLIENT_ID)
.Select(c => c.Count())
.GroupBy(g => g)
.Select(g => new { DISTINCT_PLAY_COUNT = g.Key, CLIENT_COUNT = g.Count() })
.ToList();
我认为这应该有效。
使用LINQ时,区分开总是有些棘手。 有可能的:
使用linq选择“ distinct” (我偏爱重载equals方法,即使这可能不是正确的选择。)
该链接提供了大量有关操作的建议。 “重复答案”线程也有一些不错的建议。
我还建议您:
应该更改为
仅仅因为实际上有可能遇到一个毫秒级问题,而您在技术上尚未更改日期,因为毫秒级尚未达到999级。
我希望你明白我的意思。
我建议将其放在存储过程中,而不要使用LINQ。 然后通过以下代码执行存储过程:
using (var conn = new SqlConnection(connString)) //Connection string in there
using (var command = new SqlCommand("ProcedureNameHere", conn) {
CommandType = CommandType.StoredProcedure }) {
conn.Open();
command.ExecuteNonQuery();
}
这是我的建议。 GroupBy将自动为您提供我的代码。 :
var sqlDateTime = from Exhibit row in Exhibit.exhibits
where row.PLAY_TS >= DateTime.Parse("10/08/2016 00:00:00") && row.PLAY_TS <= DateTime.Parse("10/08/2016 23:59:59")
select new { cid = row.CLIENT_ID, songid = row.SONG_ID, date = row.PLAY_TS };
var results = sqlDateTime.GroupBy(x => new { cid = x.cid, sid = x.songid })
.Select(x => new { count = x.Count(), cid = x.Key.cid, sid = x.Key.sid }).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.