从LINQ结果集访问不同的列

时间:2011-02-26 07:22:31

标签: c# asp.net linq

我有一个查询,它使用LINQ

从数据库返回多个列
var donors = from d2 in db.Donors
                 where d2.Status == "Pending"
                 select new { donorID = d2.donorID, bloodGroup = d2.bloodGroup, contactNo = d2.contactMobile, status = d2.Status };

现在我想在Labels结果集中访问一个列值的不同donors中显示结果。

例如:

Label1.Text = donorID; Label2.Text = bloodGroup; ...等等

请帮我实现这个目标。

2 个答案:

答案 0 :(得分:4)

如果您要将标签设置为某个值,则需要单个记录。目前,您正在选择记录的序列。我们假设您只对第一个值感兴趣。你可以写:

var donors = from d2 in db.Donors
             where d2.Status == "Pending"
             select new { d2.donorID, d2.bloodGroup, 
                          contactNo = d2.contactMobile, status = d2.Status };

var firstDonor = donors.FirstOrDefault();
if (firstDonor != null)
{
    Label1.Text = firstDonor.donorID;
    Label2.Text = firstDonor.bloodGroup;
    // ...
}
else
{
    // There weren't any matching donors
}

如果你想显示所有捐赠者的详细信息,你会想要更像网格的东西。

答案 1 :(得分:0)

如果你坚持保留标签,你可以做这样的事情

var donors = from d2 in db.Donors
             where d2.Status == "Pending"
             select d2;

List<Donors> myDonors = donors.ToList();

        int x = 0;
        int y = 0;
        foreach (var donor in donors)
        {
            Label myLabel = new Label();
            myLabel.Top = x;
            myLabel.Left = y;
            myLabel.Text = donor.donorID.ToString();
            panel1.Controls.Add(myLabel);
            y += myLabel.Width + 5;

            myLabel = new Label();
            myLabel.Top = x;
            myLabel.Left = y;
            myLabel.Text = donor.blodGroup.ToString();
            panel1.Controls.Add(myLabel);
            y += myLabel.Width + 5;

            myLabel = new Label();
            myLabel.Top = x;
            myLabel.Left = y;
            myLabel.Text = donor.contactNo.ToString();
            panel1.Controls.Add(myLabel);
            y += myLabel.Width + 5;

            myLabel = new Label();
            myLabel.Top = x;
            myLabel.Left = y;
            myLabel.Text = donor.status.ToString();
            panel1.Controls.Add(myLabel);
            y += myLabel.Width + 5;


            y = 0;
            x += myLabel.Height + 5;
        }