我用这个:
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();
}
}
它给了我唯一的错误
- 'CrMVC.Models.Material'不包含'MatId','MesName','MesType'的定义
醇>
修改 'MatId','MesName','MesType'只是我给的假名是错的..
答案 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指令或程序集引用?)
(是的,这是一个答案)。