ValueTuple.Create 中的命名参数 (2)
Named Parameters in ValueTuple.Create (2)
在另一个 中,我询问了 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)
。我能以某种方式去掉我的 Order by
中的 Item1 和 Item2 名称吗
因为我有一个 IQueryable 接口,所以我必须使用 ValueTuple.Create
我找到了一个解决方法:我可以制作一个类型案例:
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);
}
在另一个
第一个演示数据:
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)
。我能以某种方式去掉我的 Order by
因为我有一个 IQueryable 接口,所以我必须使用 ValueTuple.Create
我找到了一个解决方法:我可以制作一个类型案例:
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);
}