我正在尝试运行此代码:
ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
where itemTaxonomy.Item.ID == itemView.ID
orderby itemTaxonomy.Taxonomy.Name
select itemTaxonomy;
当我编译它时,我收到错误:
无法隐式转换类型
'System.Linq.IOrderedQueryable<Website.Models.ItemTaxonomy>'
来'Website.Models.ItemTaxonomy'
。存在显式转换(您是否错过了演员?)
我认为问题出在orderby itemTaxonomy.Taxonomy.Name
上,但我只是想通过Taxonomy项目的名称而不是ID来命令。有没有办法做到这一点?
答案 0 :(得分:5)
不,问题是结果是序列而你的变量是单项。
鉴于您正在表达排序,您必须期待多个价值观 - 那么您想要用它们做什么?选项:
使用First()
:
ItemTaxonomy iTaxonomy = (from itemTaxonomy in connection.ItemTaxonomy
where itemTaxonomy.Item.ID == itemView.ID
orderby itemTaxonomy.Taxonomy.Name
select itemTaxonomy).First();
这将返回具有最早名称的ItemTaxonomy
中所有具有相应项目ID的名称。
更改变量类型:
IEnumerable<ItemTaxonomy> taxonomies =
from itemTaxonomy in connection.ItemTaxonomy
where itemTaxonomy.Item.ID == itemView.ID
orderby itemTaxonomy.Taxonomy.Name
select itemTaxonomy;
现在你已经有了一系列的分类法来处理,而不是单一项目。
答案 1 :(得分:2)
您似乎正在从查询中捕获单个值。尝试:
var iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
where itemTaxonomy.Item.ID == itemView.ID
orderby itemTaxonomy.Taxonomy.Name
select itemTaxonomy;
或更明确:
IQueryable<ItemTaxonomy> iTaxonomy = ...
如果您 想要一个项目,请使用,First()
或.Single()
。
答案 2 :(得分:0)
LINQ查询返回IEnumerable<T>
个ItemTaxonomy
个对象的集合,您尝试将其分配给ItemTaxonomy
类型的变量。
您需要将变量的类型更改为IEnumerable<ItemTaxonomy>
。 (或致电First()
)