码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-12 16:40:23      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:des   style   c   color   http   int   

 

问题描述

最近在用LINQ to Entities,看看下面的代码

 //获取分页数据

            var admins = from aa in db.VAccountAdmins

                select aa;

            //处理过滤规则

            if (null != filterRules)

            {

                JArray roles = (JArray) JsonConvert.DeserializeObject(filterRules);

                foreach (var fr in roles)

                {

                    string field = fr["field"].ToString();

                    string op = fr["op"].ToString();

                    string value = fr["value"].ToString();

                    switch (field)

                    {

                        case "account_id":

                            switch (op)

                            {

                                case "all":

                                    break;

                                case "equal":

                                    admins = admins.Where(a => a.account_id == int.Parse(value));

                                    break;

                            }

                            break;

                    }

                }

 //处理排序

            PagedList<VAccountAdmin> alist = null;

            if (order == "desc")

            {

                alist = admins.OrderByDescending(a => sort).ToPagedList(page, rows);

            }

            else

            {

                alist = admins.OrderBy(a => sort).ToPagedList(page, rows);

            }

            //返回easy json数据

            var gridData = new

            {

                total = db.VAccountAdmins.ToList().Count,

                rows = alist

            };

            return Json(gridData);

乍一看没问题,可是运行却抛出异常:

bubuko.com,布布扣

原因分析

LINQ在筛选条件中如果使用率lanbla表达式,则不能在使用ToString、Int.Palse等C#代码。深层次的原因在于lambula表达式的解析。

解决方案

把C#代码单独写出来,然后LINQ里面仅仅传送变量。

 switch (field)

                    {

                        case "account_id":

                            switch (op)

                            {

                                case "all":

                                    break;

                                case "equal":

                                    int aid = int.Parse(value);

                                    admins = admins.Where(a => a.account_id ==aid );

                                    break;

                            }

                            break;

                    }

LINQ to Entities 不识别方法“Int32 Parse(System.String)”,因此该方法无法转换为存储表达式。解决,布布扣,bubuko.com

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

标签:des   style   c   color   http   int   

原文地址:http://www.cnblogs.com/tangyouwei/p/3703985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!