2009-07-08 89 views
2

我在C#中使用ASP.net MVC。为什么这是代码:在ASP.NET MVC中传递匿名类型

public IQueryable<Product> ListProducts(string prodcutType) 
{ 
    var results = from p in db.Products 
     join s in db.Stocks 
     on p.ID equals s.IDProduct 
     where p.ptype == prodcutType 
     select new { s.width, s.height, s.number};     
    return results; 
} 

显示以下错误?

错误1无法隐式转换类型 System.Linq.IQueryable<AnonymousType#1>System.Linq.IQueryable<eim.Models.Product>。 的显式转换存在(是否 缺少强制转换?)

回答

8

因为select new { s.width, s.height, s.number}意味着System.Linq.IQueryable<AnonymousType#1>但你的函数需要返回IQueryable<Product>。你的代码更改为:

public IQueryable<Product> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select p; 
    return results; 
} 

更新:

或者,也许你想IQueryable<Stock>

public IQueryable<Stock> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select s; 
    return results; 
} 

如果你想只有3个属性width +高度+号创建新的类型。例如:

public class SomeType { 
    public int Width { get; set; } 
    public int Height { get; set; } 
    public int Number { get; set; } 
} 

public IQueryable<SomeType> ListProducts(string prodcutType) 
{ 

    var results = from p in db.Products 
        join s in db.Stocks 
        on p.ID equals s.IDProduct 
        where p.ptype == prodcutType 
        select new SomeType { 
         Width = s.width, 
         Height = s.height, 
         Number = s.number 
        }; 
    return results; 
} 
1

您的LINQ查询的最后一行

select new { s.width, s.height, s.number};  

将只选择从表中“db.Stocks”这三个领域,这将创建一个新的,匿名类型,这是存储在“结果”中并传回的内容。

你在“返回结果”中传回的内容;陈述因此不是 a IQueryable<Product> - 它是完全不同的(即一个匿名类型的IQueryable)。

如果您想要返回产品,您需要将该匿名类型转换为“产品”(或从所选字段中创建一个新产品类别)。

Marc