首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ复合查询

LINQ复合查询
EN

Stack Overflow用户
提问于 2017-06-11 20:12:59
回答 4查看 4.7K关注 0票数 1

我有一个复杂的SQL查询,需要在LINQ中运行。我想知道是否可以用LINQ做这件事,或者我还需要其他什么吗?你能帮帮我吗?谢谢。

代码语言:javascript
复制
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 

这是我的课程和我迄今所取得的成就;

代码语言:javascript
复制
    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 };
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-11 21:13:00

代码语言:javascript
复制
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();

我觉得这个应该管用。

票数 1
EN

Stack Overflow用户

发布于 2017-06-11 20:24:59

对于LINQ来说,区别总是有点棘手。有可能:

Select distinct using linq (我倾向于重载等于方法,尽管这可能不是正确的方法)。

关于该做什么,这个链接有很多建议。“重复答案”线程也有一些很好的建议。

我还想建议你们:

  1. PLAY_TS <= 'DD/MM/YYYY 23:59:59‘

应改为

  1. PLAY_TS < 'DD+1/MM/YYYY 00:00:00‘

仅仅是因为在技术上还没有改变日期的情况下,实际上有可能达到毫秒问题,因为毫秒还没有达到999秒。

我希望你能理解我的意思。

票数 0
EN

Stack Overflow用户

发布于 2017-06-11 20:26:17

我建议将它放在存储过程中,而不是使用LINQ。然后通过下面的代码执行存储过程:

代码语言:javascript
复制
using (var conn = new SqlConnection(connString)) //Connection string in there
using (var command = new SqlCommand("ProcedureNameHere", conn) {
    CommandType = CommandType.StoredProcedure }) {
        conn.Open();
        command.ExecuteNonQuery();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44488321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档