C# MVC4中的Lambda表达式错误
首先,我想向大家道歉,因为我知道这个问题已经被问了很多次了。但我对MVC或.NET或Lambda表达式本身了解不多。我在一个小项目上工作,我被Lambda表达式错误卡住了,如下所示 编辑 下面是控制器代码C# MVC4中的Lambda表达式错误,c#,asp.net-mvc,lambda,C#,Asp.net Mvc,Lambda,首先,我想向大家道歉,因为我知道这个问题已经被问了很多次了。但我对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
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
});
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Data.Entity;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用MVC4Trial.Models;
使用Kendo.Mvc.UI;
使用Kendo.Mvc.Extensions;
命名空间MVC4Trial.Controllers
{
公共部分类CallTrackController:控制器
{
公共行动结果索引()
{
返回视图();
}
公共操作结果远程_数据()
{
返回视图(“AjaxBinding”);
}
公共操作结果vwCallDetails([DataSourceRequest]DataSourceRequest请求)
{
返回Json(GetCallDetailsFn().ToDataSourceResult(请求));
}
私有静态IEnumerable GetCallDetailsFn()
{
var callData=new CallTrackClassDataContext();
返回callData.CallDetails.Select(calldetail=>newcalldetails
{
CCCID=calldetail.CCCID,
Mp3\u Url=calldetail.Mp3\u Url,
Index=calldetail.Index,
Target\u Number=calldetail.Target\u Number,
Duration=calldetail.Duration,
LocalTime=calldetail.LocalTime,
站点名称地址=calldetail.Site名称地址,
Ad_Source_Name=calldetail.Ad_Source_Name,
跟踪号码=calldetail.Tracking号码,
Caller\u Number=calldetail.Caller\u Number,
可用\u功能=calldetail.Available\u功能
});
}
}
}
我想学习如何修复此错误。我错过了什么?我是否需要对模型/视图/任何其他文件进行任何类型的更改?感谢您的阅读和帮助。持续时间有问题。它的下划线为红色,表示它在类中不存在,或者其他一些问题导致它无法被识别。因为这里有一个错误,lambda表达式不能正确处理,只有到那时VisualStudio才能识别出这个错误。本质上,报告的错误掩盖了真正的问题。修复
Duration
或删除它,lambda表达式就可以了
尽管如此,你所做的并没有多大意义callData.CallDetails
已经返回了CallDetails
的实例(或者至少应该返回,或者您应该更改名称),因此使用Select
返回从CallDetails
实例填充的CallDetails
实例是多余的
更新
对不起,我没说清楚。我最后的评论实际上取决于我看不到的代码中到底发生了什么。所以有两种可能的情况:
1) callData.CallDetails
是CallDetails
的一个实例。如果是这种情况,使用Select
是浪费时间和代码,因为您所做的只是将CallDetails
的一个实例转换为另一个实例。只需执行returncalldata.CallDetails代码>将具有相同的效果
2) callData.CallDetails
不是CallDetails
的实例。如果是这种情况,那么您应该简单地重命名callData
的CallDetails
成员,以避免一开始就引起我评论的那种混乱
FWIW:如果您真的需要像这样将一些其他类型映射到CallDetails
的实例,那么您应该研究一下。编写这段代码不仅是重复和耗时的,而且会使自己更容易出错。例如,如果您以后更改CallDetails
的定义,该怎么办?现在,您必须跟踪每一个这样的显式映射,并对其进行更改,而使用AutoMapper,您可能只需更改定义就可以了。屏幕截图很好,但是您可以发布代码文本,以便其他人不需要重新键入它吗?在“持续时间”行上有什么错误?我注意到其他错误会导致linq错误。我注意到Duration
带下划线-该属性有什么特别之处吗?谢谢大家这么快就帮了忙!我通过修正持续时间列解决了这个问题。我很快就会接受答案,让我来做吧。您还建议对代码进行哪些其他更改以消除“多余”的内容?很抱歉,我听起来不太专业,但我是一名数据库人员,这是我第一次玩应用程序。@rvphx:也许可以将Select()
部分中的复制/转换代码移动到专用方法中。我不确定您是简单地克隆同一个类还是复制到一个单独的数据传输对象(DTO)中,因此我不确定该方法的最佳驻留位置。至少它会使代码更具可读性。