2010-04-29 54 views
0

我正在使用Linq-to-sql作为ORM。我写这innerjoin如何摆脱asp.net-mvc中的这个错误?

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

    return materials; 
} 

但是当我编译此我得到一个错误

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' 
to 'System.Linq.IQueryable<CrMVC.Models.Material>'. 
An explicit conversion exists (are you missing a cast?) 

我失去了一些东西...任何建议....

编辑:

我的sql查询

select M.Mat_id,M.Mat_Name,T.Name as Measurement,M.Mat_Type as Description 
from Material as M inner join 
    MeasurementTypes as T on M.MeasurementTypeId = T.Id where M.Is_Deleted=0 

回答

1

尝试 这个

刚刚添加的 “新材料()” ......

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

    return materials; 
} 
+0

@ nWorx它没有工作... – 2010-04-29 12:47:47

+0

@nWorx我得到了错误'不能初始化类型'CrMVC.Models.Material'与集合初始值设定项,因为它没有实现'System.Collections.IEnumerable'' – 2010-04-29 12:48:32

+0

@nWorx错误'CrMVC.Models .Mater ial不包含ID,Name,Type的定义 – 2010-04-29 12:52:13

0

要获得相同的结果,设置为您的SQL尝试:

public class MatertialSet 
    { 
     public int Mat_id { get; set; } 
     public string Mat_name { get; set; } 
     public string Measurement { get; set; } 
     public string Description { get; set; } 
    } 

    public static IQueryable<MatertialSet> FindAllMaterials() 
    { 
     var materials = from m in db.Materials 
         join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id 
         select new MatertialSet 
         { 
          Mat_id = m.Mat_Id, 
          Mat_name = m.Mat_Name, 
          Description = Mt.Name, 
          Measurement = m.Mat_Type 
         }; 
     return materials.AsQueryable(); 
    }