1

我发现很难将 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 控件来绑定它,但没有得到想要的结果。

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

4

2 回答 2

2

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

`var users = eFactory.SYMPOSIUM_Users.Where(a => a.UserID == eval.UserID.Value && a.Active.Value && 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")%>
于 2012-10-22T20:11:30.920 回答
0

定义用户类型列表

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();
于 2012-10-23T00:27:32.617 回答