按linq和EF分类

use*_*521 0 c# linq entity-framework

我有一个linq查询,里面是月份名称.我希望按月(1月,2月,3月,...)排序结果.

目前我有以下但它给了我和错误:

LINQ to Entities无法识别方法'System.DateTime Parse(System.String)'方法,并且此方法无法转换为存储表达式.

var shockValues = (from s in ctx.Shocks
                               where s.ID == id
                               orderby DateTime.Parse(s.MonthName)
                               select new 
                               {
                                   val = s.MonthName + "=" + s.ShockValue
                               });
Run Code Online (Sandbox Code Playgroud)

juh*_*arr 5

你没什么选择.您可以使用一长串可选运算符将名称映射到数字

order by s.MonthName == "Jan" ? 1 : s.MonthName == "Feb" ? 2 : ...
Run Code Online (Sandbox Code Playgroud)

您可以在数据库中创建一个表,将名称映射到nummeric值

var shockValues = (from s in ctx.Shocks
                   join o in MonthOrder on s.MonthName equals o.MonthName
                   where s.ID == id
                   orderby o.MonthNumber
                   select new 
                   {
                       val = s.MonthName + "=" + s.ShockValue
                   });
Run Code Online (Sandbox Code Playgroud)

或者在内存中进行排序

var shockValues = (from s in ctx.Shocks
                   where s.ID == id
                   select new
                          {
                              s.MonthName,
                              s.ShockValue
                          })
                  .AsEnumerable()
                  .OrderBy(s => DateTime.ParseExact(s.MonthName, "MMM", CultureInfo.InvariantCulture).Month)
                  .Select(s => new 
                               {
                                   val = s.MonthName + "=" + s.ShockValue
                               });
Run Code Online (Sandbox Code Playgroud)