【问题标题】:Convert T-SQL statement into LINQ expression将 T-SQL 语句转换为 LINQ 表达式
【发布时间】:2017-08-22 01:06:58
【问题描述】:

我对 linq 很陌生,实际上正在努力将以下 t-sql 语句转换为 linq to sql 或 linq to entity 表达式:

SELECT TOP 1
    vm.EventID,
    vmm.VotingMatrixID,
    PersonAcceptedCount = SUM( CAST( vmm.IsAccepted AS INT) )

FROM    VotingMatrixMember vmm

JOIN    VotingMatrix vm
    ON vmm.VotingMatrixID = vm.ID

WHERE vm.EventID = 'abbe3077-24de-45d8-ac04-13dba97c1567'
    AND vm.Deleted = 0
    AND vmm.Deleted = 0

GROUP BY vm.EventID, vmm.VotingMatrixID

ORDER BY PersonAcceptedCount DESC

【问题讨论】:

    标签: c# sql linq linq-to-sql linq-to-entities


    【解决方案1】:

    试试这个,不能测试

            var firstItem = (
                            from vmm in db.VotingMatrixMember
                            join vm in db.VotingMatrix on vmm.VotingMatrixID equals vm.ID
                            where vm.EventID =  "abbe3077-24de-45d8-ac04-13dba97c1567"
                                                    && vm.Deleted = 0
                                                    && vmm.Deleted = 0
                            group new {vm, vmm} by new {vm.EventID, vmm.VotingMatrixID} into gr
                            select new
                            {
                                EventID = gr.Key.EventID,
                                VotingMatrixID = gr.Key.VotingMatrixID,
                                PersonAcceptedCount = gr.Sum(x => Convert.ToInt32(x.IsAccepted))
                            } 
                            into groupedItem 
                            orderby  groupedItem.PersonAcceptedCount descending 
                            select groupedItem                            
                             ).FirstOrDefault();
    

    【讨论】:

    • @David B:经过一些修改,这对我有用。谢谢你们!
    【解决方案2】:
    var query =
      from vm in dataContext.VotingMatrices
      where vm.EventId == eventId
      where vm.Deleted == 0
      from vmm in vm.VotingMatrixMembers
      where vmm.Deleted == 0
      group vmm by new { vm.EventId, vmm.VotingMatrixId } into g
      select new
      {
        g.Key.EventId,
        g.Key.VotingMatrixId,
        PersonAcceptedCount: g.Select(x => Convert.ToInt32(x.IsAccepted)).Sum()
      } into resultRow
      order by resultRow.PersonAcceptedCount descending
      select resultRow;
    
    var row = query.FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多