我在使用以下C#代码
在我的应用程序中返回一些数据时遇到问题[Queryable(AllowedQueryOptions = System.Web.Http.OData.Query.AllowedQueryOptions.Select)]
public override IQueryable<BrokerOutright> Get()
{
return db.BrokerOutrights.Where(b => b.BidBroker == User.Identity.Name
|| b.OfferBroker == User.Identity.Name)
.Select(x => new
{
x.Id,
x.Product,
x.Term,
(x.AskB=='dev')?x.AskB:null,
(x.AskB=='dev')?x.AVol:null
}
);
}
以上代码告诉我异常
无法隐式转换类型System.Linq.IQueryable&#39;到System.Linq.IQueryable
我可以知道明确的转换吗?
答案 0 :(得分:4)
是的,因为您正在投射到匿名类型:
.Select(x => new
{
x.Id,
x.Product,
x.Term
})
听起来您想要为BrokerOutright
类型使用对象初始值设定项:
.Select(x => new BrokerOutright
{
Id = x.Id,
Product = x.Product,
Term = x.Term
})
话虽如此,如果db.BrokerOutrights
已经是IQueryable<BrokerOutright>
,您可能只想完全放弃Select
:
return db.BrokerOutrights
.Where(b => b.BidBroker == User.Identity.Name ||
b.OfferBroker == User.Identity.Name);
如果BrokerOutright
不是LINQ提供程序所知道的类型,您可能需要使用AsEnumerable()
在LINQ to Objects中执行投影 - 但是您必须返回IEnumerable<BrokerOutright>
而不是IQueryable<BrokerOutright>
。
答案 1 :(得分:1)
您选择的是.Select(x => new { x.Id, x.Product, x.Term
的匿名类型,但函数的返回值应为BrokerOutright
。听起来您可能希望完全从查询中删除Select
子句。
答案 2 :(得分:1)
您将返回动态类型,而不是方法签名所说的内容。
尝试更改:
.Select(x => new
{
x.Id,
x.Product,
x.Term
}
有关
.Select(x => new BrokerOutright
{
Id = x.Id,
Product = x.Product,
Term = x.Term
});