简体   繁体   English

ef核心2.1中的COUNT(DISTINCT *)

[英]COUNT(DISTINCT *) in ef core 2.1

SELECT
  e.EmpName,
  me.RemarkNumber,
  me.RemarkPeopleNumber
FROM
  EmployeeInfo e
  LEFT JOIN (
    SELECT
      COUNT(RemarkId) As RemarkNumber,
      COUNT(DISTINCT MemberId) As RemarkPeopleNumber,
      CreateUser
    FROM
      MemberRemark
    WHERE
      RemarkStatus = 0
    GROUP BY
      CreateUser
  ) AS me On e.EmpName = me.CreateUser
WHERE
  BranchCode = '0000'
  And [Status] = 0

How to convert it to LINQ? 如何将其转换为LINQ?

from e in db.EmployeeInfo
join me in (
    from memberRemarks in db.MemberRemark
    where memberRemarks.RemarkStatus == 0
    group memberRemarks by new
    {
        memberRemarks.CreateUser,
    } into g
    select new
    {
        RemarkNumber = g.Count(),
        RemarkPeopleNumber = g.Select(m => m.MemberId).Distinct().Count(),
        g.Key.CreateUser
    }
) on new { e.EmpName } equals new { EmpName = me.CreateUser } into meJoin
from me in meJoin.DefaultIfEmpty()
where e.BranchCode == "0000" & &e.Status == 0
select new
    {
        e.EmpName,
        me.RemarkNumber,
        me.RemarkPeopleNumber
    };

I got this error 我得到这个错误

RemarkPeopleNumber = g.Select(m=>m.MemberId).Distinct().Count(), //error RemarkPeopleNumber = g.Select(m => m.MemberId).Distinct()。Count(),//错误

Using asp.net core mvc 2.1 + ef core 2.1 + mssql 使用ASP.NET Core MVC 2.1 + EF Core 2.1 + MSSQL

Perhaps if you broke the query up into pieces it would be handled better? 也许,如果您将查询分解成多个部分,它将得到更好的处理? Using my SQL to LINQ Recipe I would translate your SQL like this: 使用我的SQL到LINQ食谱,我可以这样转换您的SQL:

var ePart = from e in db.EmployeeInfo
            where e.BranchCode == "0000" && e.Status == 0
            select e;
var mrPart = from mr in db.MemberRemark
             where mr.RemarkStatus == 0
             group mr by mr.CreateUser into mrg
             select new {
                 CreateUser = mrg.Key,
                 RemarkNumber = mrg.Count(),
                 RemarkPeopleNumber = mrg.Select(mr => mr.MemberId).Distinct().Count()
             };
var ans = from e in ePart
          join me in mrPart on e.EmpName equals me.CreateUser into mej
          from me in mej
          select new {
            e.EmpName,
            me.RemarkNumber,
            me.RemarkPeopleNumber
          };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM