LINQ仅限订购

时间:2010-04-07 20:08:46

标签: c# .net entity-framework .net-3.5

我正在尝试运行此代码:

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来命令。有没有办法做到这一点?

3 个答案:

答案 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()