MVC4中的Lambda表达式错误

时间:2013-02-14 21:19:48

标签: c# asp.net-mvc lambda

首先,我想向大家道歉,因为我知道这个问题已被问过很多次了。但我对MVC或.NET或Lambda表达本身并不了解。我正在处理一个小项目,我陷入Lambda表达式错误,如下所示 enter image description here

修改 以下是控制器代码

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MVC4Trial.Models;
using Kendo.Mvc.UI;
using Kendo.Mvc.Extensions;

namespace MVC4Trial.Controllers
{
    public partial class CallTrackController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Remote_Data()
        {
            return View("AjaxBinding");
        }

        public ActionResult vwCallDetails([DataSourceRequest] DataSourceRequest request)
        {

            return Json(GetCallDetailsFn().ToDataSourceResult(request));
        }

        private static IEnumerable<CallDetails> GetCallDetailsFn()
        {
            var callData = new CallTrackClassDataContext();
            return callData.CallDetails.Select(calldetail => new CallDetails
            {
                CCCID = calldetail.CCCID,
                Mp3_Url = calldetail.Mp3_Url,
                Index = calldetail.Index,
                Target_Number = calldetail.Target_Number,
                Duration = calldetail.Duration,
                LocalTime = calldetail.LocalTime,
                Site_Name___Address = calldetail.Site_Name___Address,
                Ad_Source_Name = calldetail.Ad_Source_Name,
                Tracking_Number = calldetail.Tracking_Number,
                Caller_Number = calldetail.Caller_Number,
                Available_Feature = calldetail.Available_Feature


            });
        }


     }
}

我想了解如何修复此错误。我在这里错过了什么?我是否需要对我的模型/视图/任何其他文件进行任何类型的更改?感谢阅读和帮助。

1 个答案:

答案 0 :(得分:3)

Duration出了问题。它以红色加下划线,表示它在类中不存在,或者某些其他问题导致它无法识别。由于此处存在错误,因此lambda表达式无法正常处理,只有Visual Studio才会识别出错误。从本质上讲,报告的错误掩盖了真正的问题。修复Duration或删除它,lambda表达式就可以了。

虽然它值得,但你所做的事情并没有多大意义。 callData.CallDetails 已经返回CallDetails的实例(或者至少它应该,或者您应该更改名称),因此使用Select返回{的实例从CallDetails的实例填充的{1}}是多余的。

<强>更新

抱歉没有更清楚。我的最后评论真的取决于我看不到的代码中究竟发生了什么。所以有两种可能的情况:

1)CallDetailscallData.CallDetails的一个实例。如果是这种情况,使用CallDetails会浪费时间和代码,因为您所做的只是将Select的一个实例转换为另一个实例。只做CallDetails会产生同样的效果。

2)return callData.CallDetails; 不是 callData.CallDetails的实例。如果是这种情况,那么您只需重命名CallDetails成员CallDetails,以避免引起我的评论的混乱。

FWIW:如果你真的需要将其他类型映射到这样的callData实例,你应该查看AutoMapper。编写此代码不仅重复且耗时,而且还使您更容易出错。例如,如果您以后更改CallDetails的定义怎么办?您现在必须跟踪这样的每个显式映射并更改它,而使用AutoMapper,您可能只需更改定义并完成。