Asp.net mvc EF MVC Linq-将模型传递到MVC WebGrid时出错
当我尝试将Linq查询的结果传递给MVC.Webgrid时,我得到了错误(简化): 这是失败的操作结果:Asp.net mvc EF MVC Linq-将模型传递到MVC WebGrid时出错,asp.net-mvc,entity-framework-4,Asp.net Mvc,Entity Framework 4,当我尝试将Linq查询的结果传递给MVC.Webgrid时,我得到了错误(简化): 这是失败的操作结果: public ActionResult Test() { var metrics = db.Metrics .GroupBy(c => c.Year) .Select(g => new { Year = g.Key, Q
public ActionResult Test()
{
var metrics = db.Metrics
.GroupBy(c => c.Year)
.Select(g => new
{
Year = g.Key,
Q1 = g.Where(c => c.Quarter == 1).Sum(c => c.Value),
Q2 = g.Where(c => c.Quarter == 2).Sum(c => c.Value),
Q3 = g.Where(c => c.Quarter == 3).Sum(c => c.Value),
Q4 = g.Where(c => c.Quarter == 4).Sum(c => c.Value)
});
return View(metrics);
}
我假设,由于我正在创建原始数据的轴心,我需要创建某种新模型,但我不确定在这种情况下如何做到这一点。(刚刚用EF和MVC让我的脚湿了)
有什么想法吗
短暂性脑缺血发作
J您正在向视图传递一个匿名类型,而您应该传递一个
IEnumerable
。因此,假设MyMetric
如下所示:
public class MyMetric
{
public int Year { get; set; }
public int Q1 { get; set; }
public int Q2 { get; set; }
public int Q3 { get; set; }
public int Q4 { get; set; }
}
您只需从LINQ查询返回一个IEnumerable
:
public ActionResult Test()
{
var metrics = db.Metrics
.GroupBy(c => c.Year)
.Select(g => new MyMetric
{
Year = g.Key,
Q1 = g.Where(c => c.Quarter == 1).Sum(c => c.Value),
Q2 = g.Where(c => c.Quarter == 2).Sum(c => c.Value),
Q3 = g.Where(c => c.Quarter == 3).Sum(c => c.Value),
Q4 = g.Where(c => c.Quarter == 4).Sum(c => c.Value)
});
return View(metrics);
}
您正在向视图传递匿名类型,而应该传递
IEnumerable
。因此,假设MyMetric
如下所示:
public class MyMetric
{
public int Year { get; set; }
public int Q1 { get; set; }
public int Q2 { get; set; }
public int Q3 { get; set; }
public int Q4 { get; set; }
}
您只需从LINQ查询返回一个IEnumerable
:
public ActionResult Test()
{
var metrics = db.Metrics
.GroupBy(c => c.Year)
.Select(g => new MyMetric
{
Year = g.Key,
Q1 = g.Where(c => c.Quarter == 1).Sum(c => c.Value),
Q2 = g.Where(c => c.Quarter == 2).Sum(c => c.Value),
Q3 = g.Where(c => c.Quarter == 3).Sum(c => c.Value),
Q4 = g.Where(c => c.Quarter == 4).Sum(c => c.Value)
});
return View(metrics);
}
所以我需要创建MyMetric类?正如我目前拥有的,我只是以匿名类型返回“查询”的结果。是的,您必须创建MyMetrics类。这称为视图模型。您不能将匿名对象传递给视图。我在您的答案中遗漏了某些地方。我已经尝试实现您的示例,但仍然得到相同的错误。“MyMetric”是如何使“metrics”变成IEnumerable的?注意我的答案中的
.Select
子句:.Select(g=>newMyMetric
。现在看看你的:。Select(g=>new
。注意区别吗?这就是结果变成IEnumerable
,而在您的例子中,您使用的是匿名类型。您的视图是否强类型化为@model IEnumerable
?还可以尝试调用.ToList()
:返回视图(metrics.ToList())
。那么我需要创建MyMetric类吗?因为我现在有MyMetric类,所以我只是返回“查询”的结果作为匿名类型。是的,您必须创建MyMetrics类。这称为视图模型。您不能将匿名对象传递给视图。我在您的回答中遗漏了某些内容。我尝试实现您的示例,但仍然收到相同的错误。“MyMetric”如何导致“metrics”要成为IEnumerable?请注意我的答案中的.Select
子句:。Select(g=>newmymetric
。现在看看你的:。Select(g=>new
。注意区别吗?这就是结果变成IEnumerable
,而在您的例子中,您使用的是匿名类型。您的视图是否强类型化为@model IEnumerable
?还可以尝试调用.ToList()
:返回视图(metrics.ToList());
。