• LINQ查询报错了: Method System.String ToString(System.String) has no supported translation to SQL
  • 发布于 2个月前
  • 237 热度
    2 评论
  • 刘棕刃
  • 0 粉丝 20 篇博客
  •   

我用Linq查询做数据类型转换时系统报错了,源代码如下:


using (LocaliztionDataContext dataContext = new LocaliztionDataContext())
            {
                var query = from n in dataContext.WF00048_ApplyForm where n.CreateAt.Value.Date == createAt.Date select new PartInfo { PartNo = n.PartNo, CreateTime = n.CreateAt.Value.ToString("yyyy-MM-dd") };
                return query.ToList();
            }
因为我返回的PartInfo对象中的CreateTime属性是字符串格式的,我数据库中的CreateAt自动是日期格式的,所以我直接在Linq to SQL查询中执行.tostring()的转换时,系统报如下错误:System.NotSupportedException: Method 'System.String ToString(System.String)' has no supported translation to SQL.


这个问题该怎么解决?

System.NotSupportedException: Method 'System.String ToString(System.String)' has no supported translation to SQL.
   at System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitMethodCall(SqlMethodCall mc)
   at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
   at System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression exp)
   at System.Data.Linq.SqlClient.SqlVisitor.VisitColumn(SqlColumn col)
   at System.Data.Linq.SqlClient.PostBindDotNetConverter.SqlSelectionSkipper.VisitColumn(SqlColumn col)
   at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
   at System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression exp)
   at System.Data.Linq.SqlClient.SqlVisitor.VisitNew(SqlNew sox)
   at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
   at System.Data.Linq.SqlClient.SqlVisitor.VisitExpression(SqlExpression exp)
   at System.Data.Linq.SqlClient.PostBindDotNetConverter.Visitor.VisitSelect(SqlSelect select)
   at System.Data.Linq.SqlClient.SqlVisitor.Visit(SqlNode node)
   at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(ResultShape resultShape, Type resultType, SqlNode node, ReadOnlyCollection`1 parentParameters, SqlNodeAnnotations annotations)
   at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations)
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

用户评论
  • 超级水痘
  • 如果你的.NET Framework 版本是4.0以上的(包括4.0),那么你可以在Lampda或Linq中使用SqlFunctions.StringConvert()函数进行数据类型的转换,具体操作步骤如下:

    1.在项目中添加System.Data.Entity.dll的引用,如下图:

    2.在项目中引用命名空间using System.Data.Objects.SqlClient;

    3.然后可以参考如下这种写法进行查询操作了

    var propertyTypes = 
        from p in db.PropertyType
        orderby p.PropertyTypeDescription
        select new SelectListItem
        {
            Text = p.PropertyTypeDescription,
            Value = SqlFunctions.StringConvert((double)p.PropertyTypeId)
        };

  • 2019/4/28 10:45:00 [ 0 ] [ 0 ] 回复
  • 斗鱼
  • SQL里面是没有ToString()的方法,所以系统会报错,你可以先把查出的数据先转换成List对象后,再进行字段类型的转换,具体代码可以参考如下:

     using (LocaliztionDataContext dataContext = new LocaliztionDataContext())
                {
                    var query = dataContext.WF00048_ApplyForm.Where(p => p.CreateAt.Value.Date == createAt.Date).ToList().Select(o => new PartInfo { PartNo = o.PartNo, CreateTime = o.CreateAt.Value.ToString("yyyy-MM-dd") });
                    return query.ToList();
                }

  • 2019/4/28 10:21:00 [ 0 ] [ 0 ] 回复