相关疑难解决方法(0)

将SQL Rank()转换为LINQ,或替代

我有下面的SQL语句,可以按预期/期望工作.但是我想将它翻译成LINQ语句(Lambda ??),以便它适合我的其余DAL.但是我无法弄清楚如何在LINQ中模拟Rank().

我在这里发布它的原因,可能是错误的,是看看是否有人有一个替代Rank()声明,以便我可以切换.或者,如果有一种方法Rank()在LINQ中表示也将被欣赏.

USE CMO

SELECT      vp.[PersonID] AS [PersonId]
            ,ce.[EnrollmentID]
            ,vp.[FirstName]
            ,vp.[LastName]
            ,ce.[EnrollmentDate]
            ,ce.[DisenrollmentDate]
            ,wh.WorkerCategory

FROM  [dbo].[vwPersonInfo] AS vp
            INNER JOIN 
            (
                  [dbo].[tblCMOEnrollment] AS ce
                  LEFT OUTER JOIN
                        (
                              SELECT   *
                                          ,RANK()OVER(PARTITION BY EnrollmentID ORDER BY CASE WHEN EndDate IS NULL THEN 1 ELSE 2 END, EndDate DESC, StartDate DESC) AS whrank 
                              FROM  [dbo].[tblWorkerHistory]
                              WHERE WorkerCategory = 2
                        ) AS wh 
                              ON ce.[EnrollmentID] = wh.[EnrollmentID] AND wh.whrank = 1
            ) 
                  ON vp.[PersonID] = ce.[ClientID]

WHERE (vp.LastName …
Run Code Online (Sandbox Code Playgroud)

c# sql linq linq-to-sql

13
推荐指数
2
解决办法
1万
查看次数

Entity Framework中是否有一个函数转换为SQL中的RANK()函数?

假设我想按国家/地区对客户数据库进行排名.在SQL中我会写:

select CountryID, CustomerCount = count(*), 
       [Rank] = RANK() over (order by count(*) desc)
from Customer
Run Code Online (Sandbox Code Playgroud)

现在我想在Entity Framework中写这个:

var ranks = db.Customers
  .GroupBy(c => c.CountryID)
  .OrderByDescending(g => g.Count())
  .Select((g, index) => new {CountryID = g.Key, CustomerCount = g.Count, Rank = index+1});
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  1. 它不起作用.EF抛出一个System.NotSupportedException; 显然,没有SQL转换的重载.Select()使用行号; .ToList()为了能够调用这个方法,你必须将所有内容都拉入内存中; 和
  2. 即使您在本地内存中运行该方法,它也不像RANK()SQL中的函数那样处理相同的排名,即它们应该具有相同的排名,然后下面的项目跳到原始顺序.

那我该怎么做呢?

c# sql-server-2012 entity-framework-5

10
推荐指数
1
解决办法
2815
查看次数

在Linq中订购实体多列

我在SQL Server中有一个表,其中包含以下列

  • ID(身份/主键)
  • DestinationID(外键)
  • 日期(日期字段)
  • 时间(时间场)
  • DayOfWeek(Char(3)Field)即"MON","TUE"等.

我想按日期和时间订购数据,然后按DayOfWeek和Time订购数据.因此,所有带日期的记录都显示在顶部,按时间排序,然后是按时间排序的DayOfWeek.

我已经尝试了几种方法,但只是无法理解它,我有以下代码

    var qry = ctx.DestinationTimings.Where(x => x.DestinationID == this.ID)
                     .OrderBy(t => t.Date).ThenBy(t => t.Date != null)
                     .ThenBy(t => SqlFunctions.CharIndex(t.DayOfWeek + ",", "MON,TUE,WED,THU,FRI,SAT,SUN"))
                     .ThenBy(t => t.Time);
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities entity-framework

5
推荐指数
1
解决办法
1万
查看次数

表达式树可能不包含赋值运算符?

如何在linq语句中增加索引值.

  int headIndex = -1;
           // int itemIndex = -1;
            lst = (from xx in db.vwCustomizationHeaders
                   where xx.ProductID == pID
                   select new custHeader()
                   {
                       headIndex = headIndex++,// Guid.NewGuid(),
             }
Run Code Online (Sandbox Code Playgroud)

c# linq

5
推荐指数
1
解决办法
1万
查看次数