2013-02-14 67 views
1

首先我想向大家道歉,因为我知道这个问题已经被问了很多次。但我本身对MVC或.NET或Lambda表达式本身知之甚少。我工作的一个小项目,我被困在Lambda表达式如下错误 enter image description hereMVC4中的Lambda表达式错误

编辑 下面是控制器代码

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 


      }); 
     } 


    } 
} 

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

+0

一个截图很不错,但你可以发布代码的文本,以便其他人不需要重新键入它? – PinnyM 2013-02-14 21:22:15

+1

“持续时间”行上的错误是什么?我注意到其他错误会导致linq错误。 – Andorbal 2013-02-14 21:22:38

+0

我注意到'持续时间'是加下划线的 - 这个属性有什么特别的吗? – 2013-02-14 21:22:48

回答

3

Duration有问题。它以红色标出,表明它不存在于课堂上,或其他问题导致它不被识别。由于这里有一个错误,所以lambda表达式不能正确处理,只有当Visual Studio发现错误时才会进行处理。从本质上讲,报告的错误掩盖了真正的问题。修复Duration或删除它,lambda表达式会很好。

对于什么是值得的,但你在做什么没有多大意义。 callData.CallDetails已经返回一个CallDetails(或至少它应该,或者你应该改变名称)的实例,所以使用Select返回从CallDetails实例填充的CallDetails的实例是多余的。

UPDATE

对不起,不是更清晰。我最后的评论真的取决于我无法看到的代码究竟发生了什么。所以有两种可能的情况:

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

2)callData.CallDetailsCallDetails一个实例。如果是这种情况,那么你应该简单地重命名callDataCallDetails成员,以避免首先引起我的评论的那种混淆。

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

+0

我通过修复持续时间列修复了问题。当我让我这样做时,我会很快接受答案。你会对代码提出什么样的改变来摆脱“多余的”内核?我很抱歉,我听起来不太懂技术,但我是一个数据库家伙,这是我第一次玩应用程序。 – rvphx 2013-02-14 21:30:28

+1

@rvphx:可能会将您在“Select()”部分中的复制/转换代码移至专用方法。我不确定是否只是克隆相同的类或从单独的数据传输对象(DTO)复制,因此我不确定此方法驻留的最佳位置。至少它会让你的代码更具可读性。 – 2013-02-14 21:36:33