ASP MVC控制器方法中的Linq语法错误

时间:2012-12-17 19:56:54

标签: c# asp.net-mvc-3 linq

我需要在页面控制器的Index方法中使用Linq查询,但是我在代码的“select new”部分出现以下错误:

错误

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

行动方法

    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());
    }

2 个答案:

答案 0 :(得分:4)

由于错误明确指出,您无法将LINQ查询(IQueryable<T>)的结果分配给string类型的变量。

您应该在该行中声明变量:

var agentProductTraining = select ...

答案 1 :(得分:1)

您已将变量初始化为字符串,因此编译器将变量设置为string类型(因为您已使用var关键字),但之后尝试分配匿名集合它的类型。

您可以将其声明为objectvar

object agentProductTraining;  // can safely be overwritten

我也认为你的意思是:

return BlankIndex();
if块中的

。否则它将落到

return View(agentProductTraining.ToList());

其中agentProductTraining将是null

当然,如果您在return BlankIndex区块中使用if,则可以简化整个过程:

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());