Count (Отличный x) в LINQ - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь преобразовать SQL-запрос в LINQ, но мне нужно использовать HAVING Count (Distinct), что я не могу сделать в LINQ, и я не могу найти альтернативу для получения тех же результатов

       SELECT 
       B.BranchCode ,
       B.BranchName ,
       rv.ENGINEER ,
       CONVERT ( DATE, rv.VISITDATE ) [Date] ,
       CONVERT ( TIME, rv.STARTTIME ) [Start] ,
       COUNT ( DISTINCT rv.VISITID )  V
       FROM
       dbo.ltbl_Branch                 AS B
       INNER JOIN dbo.tbl_contract     AS C ON C.BranchCode = B.BranchCode
       INNER JOIN dbo.tbl_repair_order AS r ON r.CONTRACT   = C.Contract
       INNER JOIN dbo.tbl_repair_visit AS rv ON rv.ORDERID  = r.ORDERID
       WHERE
       CONVERT ( DATE, rv.VISITDATE ) BETWEEN '2019-02-01'
                                      AND     '2019-02-01'
       AND ISNULL ( rv.FromHHT, 0 ) = 0
                    GROUP BY
                        B.BranchCode ,
                        B.BranchName ,
                        rv.ENGINEER ,
                        CONVERT ( DATE, rv.VISITDATE ) ,
                        CONVERT ( TIME, rv.STARTTIME )
                    HAVING
                        COUNT ( DISTINCT rv.VISITID ) > 1

Выше приведен SQL-запрос, который я пытаюсь преобразовать, и запрос LINQ, который у меня есть, находится ниже

from b in Ltbl_Branches
join c in Tbl_contracts on b.BranchCode equals c.BranchCode
join r in Tbl_repair_orders on c.Contract equals r.CONTRACT
join rv in Tbl_repair_visits on r.ORDERID equals rv.ORDERID
where rv.VISITDATE >= DateTime.Today.AddDays(-123)
      && rv.VISITDATE <= DateTime.Today.AddDays(-122)
      && rv.FromHHT == false
group b by new { b.BranchCode, b.BranchName, rv.ENGINEER, rv.VISITDATE, 
rv.STARTTIME } into g
where g.Count() > 1
select new {
        BranchCode = g.Key.BranchCode,
        BranchName = g.Key.BranchName,
        Engineer = g.Key.ENGINEER,
        Date = g.Key.VISITDATE,
        Time = g.Key.STARTTIME,
        V =  g.Count()
       }

Это Количество подсчета (DISTINCT rv.VISITID)> 1, которым я являюсьизо всех сил пытаюсь работать в linq, я думаю, что остальная часть кода работает как задумано.

Я извлекаю данные из базы данных в сети, 1 февраля - это случайная дата на данный момент, поскольку она имеет дубликатзаписей, и это в настоящее время 123 с даты, которая является, откуда .AddDays (-123) приходит.Два запроса возвращают разные результаты, запрос SQL возвращает счет 170, а мой запрос LINQ возвращает только 98.

...