将LINQ查询结果绑定到GridView



我发现很难将LINQ查询结果绑定到我的ASP.NET页面上的GridView控件。在主LINQ查询中,我从一个表中获取所有用户,该表符合一列的标准,该列检查"已完成" -

using (COLA_AccreditationEntities4 eFactory = new COLA_AccreditationEntities4())
{
    var evaluations = eFactory.Symposium_Evaluation.Where(a => 
            (!a.Completed.HasValue || 
              a.Completed.Value == 0) && a.Active && a.UserID >= 2063).ToList();

然后在代码中,我正在做一个foreach循环,以从与上表中的用户ID匹配的另一个表中获取所有用户ID -

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();
    if (user != null && !users.Contains(user.UserID))
    {
        string name = user.FirstName + " " + user.LastName;
        string email = user.Email;
    }
}

我要做的就是在屏幕上显示user.firstname user.lastname user.email。我使用GridView Control绑定了这一点,但没有得到预期的结果。

关于如何实现这一目标的任何想法?

您应该能够从查询中直接绑定到网格:

`var user = efactory.symposium_users.where(a => a.userid == eval.userid.value& a.Active.value.value&& amp; a.userrole == 1);this.mygrid.datasource =用户;

我建议您查看ASP.NET网站以获取教程。那里有很多好的内容。

更新:
也许您最好的解决方案是从两个表上的连接中创建一个匿名类型,这样您就不会反复查询数据存储,并且您的数据表会更简单。

var result = (from i in eFactory.Symposium_Evaluation
              join user in eFactory.SYMPOSIUM_Users on i.UserID equals user.UserID
              where user.UserRole == 1 &&
                   ((!i.Completed.HasValue || 
                     i.Completed.Value == 0) && 
                    i.Active && a.UserID >= 2063)
              select new {
                  User = user,
                  Symposium = i
              }).ToList();
myDataGrid.DataSource = result;
myDataGrid.DataBind();

现在在您的网格行模板中可以:

<%#Eval("User.FirstName")%>
<%#Eval("User.LastName")%>
<%#Eval("User.Email")%>

定义用户类型的列表

List<User> users= new List<User>();

修改您的第二个代码块,如下面的

foreach (var eval in evaluations)
{
    var user = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value 
                         && a.Active.Value && a.UserRole == 1).FirstOrDefault();
    if (user != null && !users.Contains(user.UserID))
    {
        users.Add(user);  
    }
}

在GridView中修改您的绑定代码为

<%#Eval("FirstName")%>
<%#Eval("LastName")%>

,最后将您的网格与用户列表绑定

this.mygrid.DataSource = users;
this.mygrid.DataBind();

最新更新