Я использую 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>
. Явное преобразование существует (вы отсутствует листинг?)
Потому что 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 + height + number, создайте новый тип. Например:
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;
}
Последняя строка вашего запроса LINQ
select new { s.width, s.height, s.number};
выберет только эти три поля из вашей таблицы "db.Stocks", и это создаст новый анонимный тип, который будет храниться в "результатах" и передан обратно.
То, что вы возвращаете в "результатах возврата"; поэтому не a IQueryable<Product>
- это нечто совершенно другое (это IQueryable анонимного типа).
Если вы хотите вернуть продукты, вам нужно будет указать этот анонимный тип в "Продукт" (или создать новый класс продукта из выбранных полей).
Марк