c#在Controller中使用LINQ语法构建错误

时间:2011-07-11 08:16:22

标签: c# asp.net-mvc linq

嗨大家我在这个控制器代码的第11行有以下错误:

    public JsonResult GetChartData_IncidentsBySiteStatus(string SiteTypeId, string searchTextSite, string StartDate, string EndDate)
    {
        if (searchTextSite == null)
            searchTextSite = "";

        DateTime startDate = DateTime.Parse(StartDate);
        DateTime endDate = DateTime.Parse(EndDate);

        var sitesQry = _db.Sites;
        if (SiteTypeId != "-1")
            sitesQry = sitesQry.Where(a => a.SiteTypeId.ToString() == SiteTypeId);

        var qry = from i in _db.Incidents   
                  join s in _db.Sites on i.SiteId equals s.SiteId
                  where s.SiteDescription.Contains(searchTextSite)
                    && (i.Entered >= startDate && i.Entered <= endDate)
                  group s by s.SiteStatus.SiteStatusDescription + "[" + s.SiteTypeId.ToString() + "]"
                      into grp
                      select new
                      {
                          Site = grp.Key,
                          Count = grp.Count()
                      };

        return Json(qry.ToList()  , JsonRequestBehavior.AllowGet);
    }

...........错误是:

  

错误7无法隐式转换类型   'System.Linq.IQueryable'来   'System.Data.Linq.Table'。显式转换   存在(你错过了演员吗?)C:\ Documents and   Settings \ Administrator \ Desktop \ IRenewables_EMAS \ IRenewables_EMAS \ Controllers \ IncidentController.cs 69 28 Emas.Web

有人可以为此建议解决方法吗?

感谢

2 个答案:

答案 0 :(得分:1)

您正尝试将base class实例分配给sub class实例。

而不是

var sitesQry = _db.Sites;

尝试使用

IQueryable<Site> sitesQry = _db.Sites;

答案 1 :(得分:0)

虽然@Eranga的解决方案可行,但我觉得有更多的选择和更好的解释。

首先,您无法分配值的原因是您尝试将接口分配和实现为具体类型。这是不可能的,因为你不知道什么可以实现该接口,这意味着它不能分配给具有具体类型的东西。

这有多种选择。您可以像@Eranga建议并创建一个新变量

IQueryable<Site> sitesQry = _db.Sites;

或者您可以调用Linq公开的。CopyToDataTable扩展方法。

sitesQry = _db.Sites.CopyToDataTable();