如何在 C# 中显示对象的数据
本文关键字:对象 数据 显示 | 更新日期: 2023-09-27 18:33:33
这是我的代码:
void Main() {
List<Restaurant> RestaurantData = new List<Restaurant>();
}
class Restaurant {
public int Id;
public List<Complaint> Complaints = new List<Complaints>();
}
class Complaint {
public string Name;
public string Address;
public int Age;
public DateTime ComplaintDate;
}
我想在 DataGridView 控件中呈现 RestaurantData 中包含的数据。首先,我想显示餐厅的 ID,然后是针对餐厅的投诉数量,使其看起来像这样(其中 ID 在 A 列中,名称在 B 列中,依此类推(:
ID1、姓名、地址、年龄、日期(空格(, 姓名, 地址, 年龄, 日期(空格(, 姓名, 地址, 年龄, 日期ID2,姓名,地址,年龄,日期(空格(, 姓名, 地址, 年龄, 日期(空格(, 姓名, 地址, 年龄, 日期
每家餐厅至少有1起投诉,有些餐厅可能有很多投诉。 但在所有情况下,我希望餐厅的ID只出现一次(随之而来的是投诉(。 我过去对 DataGridView 的使用仅限于 dataGridView1.DataSource =(某个数组(。但是,我这次要呈现的信息显然不是一个数组,所以我被卡住了。
var ds = (from r in RestaurantData
from c in RestaurantData.Complaint
select new {Id = r.Id, Address =c.Address, Age = c.Age, Name = c.Name, Date = c.ComplaintDate}
).ToList();
dataGridView1.DataSource = ds;
目前,这会用相应的餐厅 ID 填充每一行。 如何调整上述查询,使餐厅 ID 仅显示一次?
你快到了。 你几乎完全拥有你想要的东西,并且正在一个合适的庄园里得到它,但你真正需要知道的是,一个特定的投诉是否是该列表中的第一项。 获得它的方法是在从具有索引作为参数的complaints
中进行选择时,使用 Select
的重载。 为此,您需要使用方法语法,而不是查询语法,以便 这占了大部分更改。
一旦你调整了指数ID
就是一个相当微不足道的检查。
var data = restaurantData.SelectMany(restaurant =>
restaurant.Complaints.Select((complaint, index) => new
{
ID = index == 0 ? restaurant.Id.ToString() : "",
complaint.Name,
complaint.Address,
complaint.Age,
Date = complaint.ComplaintDate,
}));