将查询发送到模型存储库

时间:2014-03-13 00:15:36

标签: c# asp.net-mvc

请帮忙。我是ASP.NET MVC的新手,我正在尝试向存储库发送查询,但它给了我一个错误:

  

Errr 3无法隐式转换类型   'System.Collections.Generic.List'到   'System.Collections.Generic.IList'。一个   存在显式转换(您是否错过了演员?)

我正在使用一个只包含我需要的列的Schema类。这是我用于存储库的代码。

public class SSGridRepository : SSGridIRepository
{
    private DataClassesSSDataContext db;

    public SSGridRepository()
    {
        db = new DataClassesSSDataContext();
    }

    public IList<SSQuerySchema> ListAll()
    {

        var SSQuery = (from HISTORies in db.HISTORies
                       join SSes in db.SSes on HISTORies.WO equals SSes.WO
                       join SSCUSTOMs in db.SSCUSTOMs on SSes.WO equals SSCUSTOMs.WO
                       join StatusTables in db.StatusTables on new { STATUS = SSes.STATUS } equals new { STATUS = StatusTables.Status }
                       join StatusTable_1 in db.StatusTables on new { OLDSTATUS = HISTORies.OLDSTATUS } equals new { OLDSTATUS = StatusTable_1.Status }
                       join StatusTable_2 in db.StatusTables on new { NEWSTATUS = HISTORies.NEWSTATUS } equals new { NEWSTATUS = StatusTable_2.Status }
                       where
                         HISTORies.OLDSTATUS == "m" &&
                         HISTORies.NEWSTATUS == "n" &&
                         HISTORies.ACTION == "Change Job Status" &&
                         HISTORies.OLDSTATUS != HISTORies.NEWSTATUS &&
                         HISTORies.DATE.Value.Year == Convert.ToDateTime(DateTime.Now).Year ||
                         HISTORies.OLDSTATUS != HISTORies.NEWSTATUS &&
                         HISTORies.NEWSTATUS == "m" &&
                         HISTORies.ACTION == "Checked In Work Order" &&
                         HISTORies.DATE.Value.Year == Convert.ToDateTime(DateTime.Now).Year
                       orderby
                         HISTORies.DATE
                       select new
                       {
                           HISTORies.WO,
                           SSes.TITLE,
                           SSes.DESCRIPT,
                           SSCUSTOMs.CUSTNAME,
                           SSes.STAKER,
                           HISTORies.USER,
                           SSes.STATUS,
                           HISTORies.OLDSTATUS,
                           HISTORies.NEWSTATUS,
                           CURRENT_STATUS = StatusTables.Description,
                           OLD_STATUS = StatusTable_1.Description,
                           NEW_STATUS = StatusTable_2.Description,
                           HISTORies.DATE.Value.Month,
                           HISTORies.DATE
                       }).Distinct();
        return SSQuery.ToList();
    }        
}

2 个答案:

答案 0 :(得分:3)

在Linq中,你这样做:

select new  {
                           HISTORies.WO,
                           SSes.TITLE,
                           SSes.DESCRIPT,
                           SSCUSTOMs.CUSTNAME,
                           SSes.STAKER,
                           HISTORies.USER,
                           SSes.STATUS,
                           HISTORies.OLDSTATUS,
                           HISTORies.NEWSTATUS,
                           CURRENT_STATUS = StatusTables.Description,
                           OLD_STATUS = StatusTable_1.Description,
                           NEW_STATUS = StatusTable_2.Description,
                           HISTORies.DATE.Value.Month,
                           HISTORies.DATE
                       }

这是一种动态类型,因此它与List<SSQuerySchema>

的返回类型不匹配

尝试初始化您在Linq中指定的类型并设置课程属性。

  select new SSQuerySchema {
                               // initialize all properties here
                           }

答案 1 :(得分:1)

您尝试返回IList<SSQuerySchema>,但实际的回复类型为IList<dynamic>(您的选择不是SSQuerySchema,而是匿名类型。

您应该创建函数IList<dynamic>的返回类型,或者修改您的选择以创建SSQuerySchema的新实例