在另一个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
答案 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);
}