LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。

复制代码
复制代码
var data = DataSource.Skip(iDisplayStart).Take(iDisplayLength).Select(o => new
            {
                MatNR = o.MatNR,
                MatDB = o.MatDB,
                CreatedOn=o.CreatedOn.ToString(),
                CreatedBy = o.CreatedBy,
                Id2 = o.MatNR
            });
复制代码
复制代码

 以上语句就会出现这个提示:LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。

解决方法有两种

 一、使用SqlFunctions

1、

 CreatedOn = SqlFunctions.DateName("year", o.CreatedOn) + "-" 
                + SqlFunctions.DateName("month", o.CreatedOn) +"-"
                + SqlFunctions.DateName("day",o.CreatedOn),

 

2、

 CreatedOn= SqlFunctions.DateName("yyyy", o.CreatedOn)
                           +"-"+               
                           SqlFunctions.StringConvert((decimal)SqlFunctions.DatePart("mm", o.CreatedOn))
                           +"-"+
                           SqlFunctions.DateName("dd",o.CreatedOn),

 

3、

CreatedOn = SqlFunctions.DateName("yyyy", o.CreatedOn)
                            + "-" +
                            SqlFunctions.StringConvert((decimal)SqlFunctions.DatePart("mm", o.CreatedOn)).Trim()
                            + "-" +
                            SqlFunctions.DateName("dd", o.CreatedOn),

注意:月份只有1位数!还不够完美。

 

二、Linq-to-entities 转换到Linq-to-objects

//Do it in two steps - one L2E query that does the L2E supported part, and a L2O query that does the date formatting and other stuff that is best done in .net code...

 ////Linq-to-entities query to get the fullname, categoryname, and date

//var query = from c in db.Contacts select new { c.FullName, c.Category.CategoryName, c.DateCreated };

 

////Linq-to-objects query (.AsEnumerable will separate the L2E from L2O part) that call date formatting methods and other stuff that isn't supported by L2E

//var r = from c in query.AsEnumerable() select new { c.FullName, c.CategoryName, ShortDate = c.DateCreated.ToShortDateString() };

复制代码
复制代码
var data = DataSource.Skip(iDisplayStart).Take(iDisplayLength).Select(o => new
            {
                MatNR = o.MatNR,
                MatDB = o.MatDB,
                CreatedOn=o.CreatedOn,
                CreatedBy = o.CreatedBy,
                Id2 = o.MatNR
            });

var a = from c in data.AsEnumerable()
                    select new
                    {
                        MatNR = c.MatNR,
                        MatDB = c.MatDB,
                        //CreatedOn = Convert.ToDateTime(c.CreatedOn).ToShortDateString(),// 2014/2/28
                        //CreatedOn = c.CreatedOn.ToString(),//2014/2/28 15:09:40
                        CreatedOn =c.CreatedOn.ToString("yyyy-MM-dd"),//如果数据库里的日期字段可以为null,则CreatedOn.ToString("yyyy-MM-dd")这种方式是不可以的,如果不为null则可以;
                        CreatedBy = c.CreatedBy,
                        Id2 = c.MatNR
                    };
复制代码
复制代码

posted @   韩梦芫  阅读(572)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示