【问题标题】:Lambda expression error in MVC4MVC4 中的 Lambda 表达式错误
【发布时间】:2013-02-14 21:19:47
【问题描述】:

首先我想向你们所有人道歉,因为我知道这个问题已经被问过很多次了。但我对 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


            });
        }


     }
}

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

【问题讨论】:

  • 截图很好,但你能把代码的文本贴出来,这样其他人就不需要重新输入了吗?
  • “持续时间”行的错误是什么?我注意到其他错误会导致 linq 错误。
  • 我注意到Duration 带有下划线 - 该属性有什么特别之处吗?
  • 感谢大家这么快就帮忙!

标签: c# asp.net-mvc lambda


【解决方案1】:

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

尽管如此,你所做的事情并没有多大意义。 callData.CallDetails 已经 返回一个 CallDetails 的实例(或者至少应该,或者你应该更改名称),因此使用 Select 返回一个从实例填充的 CallDetails 的实例CallDetails 是多余的。

更新

对不起,没有更清楚。我的最后一条评论真的取决于我看不到的代码中到底发生了什么。所以有两种可能的情况:

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

2) callData.CallDetails 不是 CallDetails 的实例。如果是这种情况,那么您应该简单地重命名 callDataCallDetails 成员,以避免最初引发我评论的那种混乱。

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

【讨论】:

  • 我通过修复持续时间列解决了这个问题。当 SO 让我这样做时,我会很快接受答案。您会建议对代码进行哪些其他更改以消除“多余”?对不起,我听起来不太专业,但我是数据库专家,这是我第一次玩应用程序。
  • @rvphx:也许将Select() 部分中的复制/转换代码移动到专用方法。我不确定您是简单地克隆同一个类还是复制到/从单独的数据传输对象 (DTO),所以我不确定该方法的最佳驻留位置。至少它会让你的代码更具可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 2022-01-20
  • 2014-03-13
  • 2023-03-12
相关资源
最近更新 更多