LINQ仅限订购

Ben*_*man 1 .net c# entity-framework .net-3.5

我正在尝试运行此代码:

ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
                         where itemTaxonomy.Item.ID == itemView.ID
                         orderby itemTaxonomy.Taxonomy.Name
                         select itemTaxonomy;
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我收到错误:

无法隐式转换 'System.Linq.IOrderedQueryable<Website.Models.ItemTaxonomy>''Website.Models.ItemTaxonomy'.存在显式转换(您是否错过了演员?)

我相信问题在于,orderby itemTaxonomy.Taxonomy.Name但我只是试图通过Taxonomy项目的名称而不是他们的ID来命令.有没有办法做到这一点?

Jon*_*eet 5

不,问题是结果是序列,而您的变量是单个项目.

鉴于您正在表达订单,您必须期待多个价值 - 那么您想要用它们做什么?选项:

  • 用途First():

    ItemTaxonomy iTaxonomy = (from itemTaxonomy in connection.ItemTaxonomy
                              where itemTaxonomy.Item.ID == itemView.ID
                              orderby itemTaxonomy.Taxonomy.Name
                              select itemTaxonomy).First();
    
    Run Code Online (Sandbox Code Playgroud)

    这将返回ItemTaxonomy具有相应项目ID的所有具有最早名称的名称.

  • 更改变量类型:

    IEnumerable<ItemTaxonomy> taxonomies = 
        from itemTaxonomy in connection.ItemTaxonomy
        where itemTaxonomy.Item.ID == itemView.ID
        orderby itemTaxonomy.Taxonomy.Name
        select itemTaxonomy;
    
    Run Code Online (Sandbox Code Playgroud)

    现在你已经有了一系列的分类法来处理,而不是单个项目.