将SQL转换为LINQ查询以获得最大值

时间:2012-02-10 15:12:34

标签: asp.net sql linq

嗨伙计们,我被困在转换到SQL下面的LINQ查询。 我想要的是从(FA-00001,FA-00059)

列表中获得最大数量
SELECT MAX(CAST(SUBSTRING(ReferenceId, PATINDEX('%-%', ReferenceId) + 1, LEN(ReferenceId) - PATINDEX('%-%', ReferenceId)) AS int)) AS MaxReferenceId FROM [ClientRC].[dbo].[EHO_Action]

这可以转换为LINQ吗?感谢

3 个答案:

答案 0 :(得分:0)

http://msdn.microsoft.com/en-us/library/bb386972.aspx

var myvar = (from v in db.object where v!=null select v.id).Max();

MSDN有很多这样的例子。

或者,如果您正在使用实体框架,则可以直接对datacontext执行查询。只需确保您是否正在使用参数进行参数化,而不是将用户输入直接输入到查询中。 http://msdn.microsoft.com/en-us/library/ee358769.aspx

答案 1 :(得分:0)

试试这个..

var list = DBContext.EHO_Action
                    .Where(x => x.YourListColumn != null)
                    .Select(x => x.YourListColumn).ToList(); // Take the list (FA-00001 ,FA-00059) from db to a list

var maxNo = list.Max(x => Convert.ToInt32(x.Split('-')[1]));

请根据您的Linq上下文更改上下文和列名称。

如果你想使用sql,你可以这样做..

var list = DBContext.ExecuteQuery<string>("select yourreqrdcolumn from [ClientRC].[dbo].[EHO_Action]");

答案 2 :(得分:0)

使用匿名投影的另一种方法:

var y = (from record in
                (from record in db.ClientRC
                select new
                {
                    Group = "x",
                    ReferenceNumber = Convert.ToInt32(record.ReferenceId.Split('-')[1])
                })
            group record by new { record.Group } into g
            select new
            {
                MaxReferenceId = g.Max(p => p.ReferenceNumber)
            });