2012-12-17 41 views
0

我有一個LINQ查詢,我需要在頁面的控制我的索引方法使用,但我得到以下錯誤「選擇新的」代碼的一部分:Linq的語法錯誤

錯誤

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'string' 

Action方法

public ActionResult Index(string query) 
    { 

     var agentProductTraining = ""; 

     if (String.IsNullOrEmpty(query)) 
     { 
      BlankIndex(); 
     } 
     else 
     { 
      agentProductTraining = from course in db.Course 
            where 
             course.CourseDescription.Contains(query) 
            select new 
            { 
             course.CourseCode, 
             course.CourseDescription, 
             course.Partner, 
             course.Status, 
             course.LastChangeDate, 
             course.LastChangeOperator 
            }; 
     } 

     return View(agentProductTraining.ToList()); 
    } 

回答

1

你初始化變量爲一個字符串,因此編譯器的變量string型(既然你用戶var關鍵字),但後來試圖爲它分配一組匿名類型。在if

return BlankIndex(); 

你可以把它聲明爲object代替或var

object agentProductTraining; // can safely be overwritten 

此外,我假定你的意思。否則,它會始終陷入

return View(agentProductTraining.ToList()); 

其中agentProductTraining將是null

當然,如果你在if塊使用return BlankIndex可以簡化整個事情:

if (String.IsNullOrEmpty(query)) 
{ 
    return BlankIndex(); 
} 

// don't need an `else` here since the if will return to the caller 
var agentProductTraining = from course in db.Course 
          where 
           course.CourseDescription.Contains(query) 
          select new 
          { 
           course.CourseCode, 
           course.CourseDescription, 
           course.Partner, 
           course.Status, 
           course.LastChangeDate, 
           course.LastChangeOperator 
          }; 

return View(agentProductTraining.ToList()); 
+1

這樣做會更好: var agentProductTraining = new List (); 然後你的回報仍然是一個清單,至少是新鮮事。 – IyaTaisho

+0

這並不重要 - 初始化的值將通過'ToList()'被賦值吹掉。它不會將項目添加到初始化列表。 –

+0

此外,您還沒有返回_list_,您將返回在[構造函數](http://msdn.microsoft.com/zh-cn/library/dd492930)中用'object'初始化的'View'。 ASPX) –

4

作爲埃羅r明確指出,您不能將LINQ查詢的結果(IQueryable<T>)分配給類型爲string的變量。

你應該聲明變量在該行:

var agentProductTraining = select ... 
+0

除了它會被定義在'else'塊中,並且不可用於'return'語句。 –