如何显示对象的数据?

时间:2014-03-17 20:49:56

标签: c# linq datagridview

这是我的代码:

public class Restaurant {
    public int ID { get; set; }
    public int DOHVisits { get; set; }
    public int QtyComplaints { get; set; }
    public List<Complaint> Complaints = new List<Complaint>();
}

public class Complaint {
    public string Name; { get; set; }
    public string Address; { get; set; }
    public string Description; { get; set; }
    public DateTime ComplaintDate; { get; set; }
}

void Main() {
    List<Restaurant> RestaurantData = new List<Restaurant>();
}

我想在DataGridView控件中显示RestaurantData中包含的数据。首先,我想显示餐馆的ID,然后是健康部门(DOHVisits)访问过的次数,然后是投诉数量(QtyComplaints),最后是投诉详情,如果有的话任何。它看起来像这样(ID在列A中,DOHVisits在B列中,等等):

  • ID,DOHVisits,QtyComplaints,Name,Address,Description,ComplaintDate
  • 1234,8,0,空白,空白,空白,空白
  • 5678,23,5,姓名,地址,说明,投诉日期
  • (空格),(空格),(空格),名称,地址,描述,投诉日期
  • (空格),(空格),(空格),名称,地址,描述, ComplaintDate
  • (空格),(空格),(空格),名称,地址,描述, ComplaintDate
  • (空格),(空格),(空格),名称,地址,描述,投诉日期

每家餐厅至少有1个DOHVisit。有些餐馆有0个投诉,有些有很多。但在所有情况下,我都希望餐馆的ID只出现一次(如果他们有任何投诉可以跟进)。我以前对DataGridView的使用仅限于dataGridView1.DataSource =(某些数组)。但是,这次我要呈现的信息显然不是一个数组,所以我被卡住了。

  var ds = RestaurantData.OrderByDescending(x => x.DOHVisits).SelectMany(Restaurant 
                    => Restaurant.Complaint.Select((Complaint, index) 
                    => new
            {

                ID = index >= 0 ? Restaurant.ID.ToString() : "",
               DOHVisits = Restaurant.DOHVisits.ToString(),
                QtyComplaints = Restaurant.QtyComplaints.ToString(),    
                Complaint.Name,
                Complaint.Address,
                Complaint.Description,
                Complaint.ComplaintDate

            })).ToList();

dataGridView1 = ds;

上述代码存在的问题是,所有餐馆都没有投诉。我想包括没有投诉的餐厅,并将它们显示在数据网格中。

1 个答案:

答案 0 :(得分:1)

首先,我声明实现GridView的每个数据行的类:

class ResultLine
{
    public int? ID { get; set; }
    public int? DOHVisits { get; set; }
    public int? QtyComplaints { get; set; }
    public string ComplaintName { get; set; }
    public string ComplaintAddress { get; set; }
    public string ComplaintDescription { get; set; }
    public DateTime? ComplaintDate { get; set; }
}

可以写下查询:

IEnumerable<ResultLine> lines = RestaurantData.OrderByDescending(x => x.DOHVisits)
    .SelectMany(r => new List<ResultLine>() {
        new ResultLine() {
            ID = r.ID,
            DOHVisits = r.DOHVisits,
            QtyComplaints = r.QtyComplaints,
            ComplaintName = null,
            ComplaintAddress = null,
            ComplaintDescription = null,
            ComplaintDate = null
        }
    }.Concat(r.Complaints.OrderBy(c => c.ComplaintDate).Select(c => new ResultLine() {
        ID = null,
        DOHVisits = null,
        QtyComplaints = null,
        ComplaintName = c.Name,
        ComplaintAddress = c.Address,
        ComplaintDescription = c.Description,
        ComplaintDate = c.ComplaintDate
    })));