我试图从连接查询中返回一个列表并且遇到错误。
这是我的代码:
public IList<UniStock.Domain.Tables.Inventory> SelectInventoryListByColourSizeGroup(string styleColour, string sizeGroup)
{
var db = new UniStockContext();
IQueryable<Domain.Tables.Inventory> q = (from c in db.Inventories
join o in db.SizeGroupSizes
on c.Size.Trim() equals o.Description.Trim()
where (c.SytleColour == styleColour)
&& (o.SizeGroup.Description == sizeGroup)
select new
{
c
});
return q;
}
我现在看到的错误是:
无法隐式转换类型System.Linq.IQueryable&#39;到System.Linq.IQueryable&#39;。存在显式转换(您是否错过了演员?)`
答案 0 :(得分:4)
问题是,正如错误所说,当您的方法期望特定类型时,您无法返回匿名类型。通过使用新的{}语法,您将创建一个匿名类型。只需删除新的{}
即可public IList<UniStock.Domain.Tables.Inventory> SelectInventoryListByColourSizeGroup(string styleColour, string sizeGroup)
{
var db = new UniStockContext();
IQueryable<Domain.Tables.Inventory> q = (from c in db.Inventories
join o in db.SizeGroupSizes
on c.Size.Trim() equals o.Description.Trim()
where (c.SytleColour == styleColour)
&& (o.SizeGroup.Description == sizeGroup)
select c);
return q.ToList();
}
答案 1 :(得分:3)
LINQ表达式的这一部分
select new { c } ;
将为您提供匿名类型对象的列表。您的方法签名表示它应该返回IList<Inventory>
。由于您没有返回预期的类型,因此您将收到此编译时错误。
您选择的应该只是c
,这是db.Inventories
的别名(尽管有过滤器)
var q = from c in db.Inventories
join o in db.SizeGroupSizes
on c.Size.Trim() equals o.Description.Trim()
where (c.SytleColour == styleColour)
&& (o.SizeGroup.Description == sizeGroup)
select c;
return q.ToList();
变量q
将为IQueryable<Inventory>
,当您调用ToList()
时,它将执行LINQ表达式并将获得List<Inventory>
并且您将返回该值,这是与您的方法签名(IList<Signature>
)
答案 2 :(得分:1)
您通过这样做投射到新的AnonymousType
:
select new { c }
你可能想要的是像这样选择对象:
select c
然后,您需要在末尾追加.ToList()
以执行查询并填充列表。