找不到类型或命名空间名称

时间:2010-04-29 13:40:26

标签: c# iqueryable

我用这个:

   public class ConstructionRepository
    {
        private CRDataContext db = new CRDataContext();

        public IQueryable<Material> FindAllMaterials()
        {
            //return db.Materials;
            var materials = from m in db.Materials
                            join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
                            select new Material
                            {
                                Mat_Name =  m.Mat_Name,
                                MeasurementTypeId =  Mt.Name, 
                                 Mat_Type = m.Mat_Type };
            return materials.AsQueryable();
        }
    }

它给了我唯一的错误

  
      
  1. 'CrMVC.Models.Material'不包含'MatId','MesName','MesType'的定义
  2.   

修改 'MatId','MesName','MesType'只是我给的假名是错的..

4 个答案:

答案 0 :(得分:4)

我想说修复第一个错误将是一个好的开始 - 你确定你已经在项目中引用了包含MaterialsView的程序集,并在顶部添加了using指令您的代码文件包含MaterialsView的命名空间?

其他两个错误 [请参阅编辑]一旦您正确引用并包含MaterialsView类型,第一个和第三个错误就会消失。

修改:作为Tejs points out in his answer,第二个错误肯定是因为您错过了对AsQueryable的调用。

答案 1 :(得分:1)

1)确保您的'MaterialsView'类所在的任何名称空间都是此代码文件中的引用。如果它被引用,请检查以确保该文件正在构建并且没有抛出任何编译器错误 - 有时它可以掩盖真正的错误。

2)像这样的LINQ查询将返回IEnumerable实例,而不是IQueryable。当您返回材料时,请调用材料.AsQueryable();

3)我在这个方法中没有看到ToList()的调用,编译器在哪里告诉你这个错误发生了?

答案 2 :(得分:1)

Material类必须具有与select new Material {...}子句中使用的名称相同的可设置属性,您不能只进行这些操作。

答案 3 :(得分:0)

无法找到类型或命名空间名称MaterialsView(您是否缺少using指令或程序集引用?)

(是的,这是一个答案)。