2013-02-14 66 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