首先,我想向大家道歉,因为我知道这个问题已被问过很多次了。但我对MVC或.NET或Lambda表达本身并不了解。我正在处理一个小项目,我陷入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 :(得分:3)
Duration
出了问题。它以红色加下划线,表示它在类中不存在,或者某些其他问题导致它无法识别。由于此处存在错误,因此lambda表达式无法正常处理,只有Visual Studio才会识别出错误。从本质上讲,报告的错误掩盖了真正的问题。修复Duration
或删除它,lambda表达式就可以了。
虽然它值得,但你所做的事情并没有多大意义。 callData.CallDetails
已经返回CallDetails
的实例(或者至少它应该,或者您应该更改名称),因此使用Select
返回{的实例从CallDetails
的实例填充的{1}}是多余的。
<强>更新强>
抱歉没有更清楚。我的最后评论真的取决于我看不到的代码中究竟发生了什么。所以有两种可能的情况:
1)CallDetails
是callData.CallDetails
的一个实例。如果是这种情况,使用CallDetails
会浪费时间和代码,因为您所做的只是将Select
的一个实例转换为另一个实例。只做CallDetails
会产生同样的效果。
2)return callData.CallDetails;
不是 callData.CallDetails
的实例。如果是这种情况,那么您只需重命名CallDetails
成员CallDetails
,以避免引起我的评论的混乱。
FWIW:如果你真的需要将其他类型映射到这样的callData
实例,你应该查看AutoMapper。编写此代码不仅重复且耗时,而且还使您更容易出错。例如,如果您以后更改CallDetails
的定义怎么办?您现在必须跟踪这样的每个显式映射并更改它,而使用AutoMapper,您可能只需更改定义并完成。