我需要在页面控制器的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());
}
答案 0 :(得分:4)
由于错误明确指出,您无法将LINQ查询(IQueryable<T>
)的结果分配给string
类型的变量。
您应该在该行中声明变量:
var agentProductTraining = select ...
答案 1 :(得分:1)
您已将变量初始化为字符串,因此编译器将变量设置为string
类型(因为您已使用var
关键字),但之后尝试分配匿名集合它的类型。
您可以将其声明为object
或var
:
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());