开发者

LINQ Join for Orderby only

开发者 https://www.devze.com 2022-12-26 15:25 出处:网络
I am trying to run this code: ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy where itemTaxonomy.Item.ID == itemView.ID

I am trying to run this code:

ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
                         where itemTaxonomy.Item.ID == itemView.ID
                         orderby itemTaxonomy.Taxonomy.Name
                         select itemTaxonomy;

When I compiled it I get the error:

Cannot implicitly convert type 'System.Linq.开发者_JS百科IOrderedQueryable<Website.Models.ItemTaxonomy>' to 'Website.Models.ItemTaxonomy'. An explicit conversion exists (are you missing a cast?)

I believe the issue is with orderby itemTaxonomy.Taxonomy.Name but I am just trying to order by the name of Taxonomy items instead of their IDs. Is there a way to do that?


No, the problem is that the result is a sequence whereas your variable is a single item.

Given that you're expressing ordering, you must be expecting multiple values - so what do you want to do with them? Options:

  • Use First():

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

    This will return the ItemTaxonomy with the earliest name out of all the ones with the appropriate item ID.

  • Change your variable type:

    IEnumerable<ItemTaxonomy> taxonomies = 
        from itemTaxonomy in connection.ItemTaxonomy
        where itemTaxonomy.Item.ID == itemView.ID
        orderby itemTaxonomy.Taxonomy.Name
        select itemTaxonomy;
    

    Now you've got a sequence of taxonomies to deal with, instead of a single item.


You seem to be capturing a single value from a query. Try:

var iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy
                where itemTaxonomy.Item.ID == itemView.ID
                orderby itemTaxonomy.Taxonomy.Name
                select itemTaxonomy;

or to be more explicit:

IQueryable<ItemTaxonomy> iTaxonomy = ...

If you do want a single item, use ,First() or .Single().


The LINQ query returns a set (IEnumerable<T>) of ItemTaxonomy objects, which you are trying to assign to a variable of type ItemTaxonomy.

You need to change the type of the variable to IEnumerable<ItemTaxonomy>. (Or call First())

0

精彩评论

暂无评论...
验证码 换一张
取 消