ValueTuple.Create中的命名参数(2)

时间:2019-03-15 10:01:25

标签: c# .net c#-7.0

在另一个SO Question中,我询问了ValueTuple.Create中的命名参数。但是由于我的示例代码不适用于我的问题,所以我没有得到想要的答案。因此,我们再次进行以下操作:

第一个演示数据:

public class Product
    {
        public string Name { get; set; }
        public int CategoryID { get; set; }
    }

    public class Category
    {
        public string Name { get; set; }
        public int ID { get; set; }
    }

    public class Data
    {
        public IQueryable<Category> Categories { get; } = new List<Category>()
        {
            new Category(){Name="Beverages", ID=001},
            new Category(){ Name="Condiments", ID=002},
        }.AsQueryable();

        public IQueryable<Product> Products { get; } = new List<Product>()
        {
            new Product{Name="Cola",  CategoryID=001},
            new Product{Name="Tea",  CategoryID=001},
            new Product{Name="Mustard", CategoryID=002},
            new Product{Name="Pickles", CategoryID=002},
        }.AsQueryable();

    }

注意 IQueryable

然后解决我的问题:

    public static IEnumerable<(int CategoryId, string ProductName)> GetList()
    {
        var data = new Data();
        return
            (from category in data.Categories
                join prod in data.Products on category.ID equals prod.CategoryID
                select ValueTuple.Create(category.ID, prod.Name)).OrderBy(e => e.Item2);
    }

但是,如果要按产品名称排序的结果,则必须使用OrderBy(e => e.Item2)。我能以某种方式摆脱订单中的Item1和Item2名称吗?

由于我有一个IQueryable接口,因此必须使用ValueTuple.Create

1 个答案:

答案 0 :(得分:0)

我找到了一个工作环境:我可以制作一个类型用例:

    public static IEnumerable<(int CategoryId, string ProductName)> GetList()
    {
        var data = new Data();
        return
            (from category in data.Categories
                join prod in data.Products on category.ID equals prod.CategoryID
                select ((int CategoryId, string ProductName))ValueTuple.Create(category.ID, prod.Name)).OrderBy(e => e.ProductName);
    }