将LINQ查询绑定到asp:DataList时有明显的不可比错误

时间:2011-05-12 00:56:46

标签: c# asp.net sql linq

我在下面的LINQ语句中一直收到此错误,我无法弄清楚原因。

  

无法将文本数据类型选为DISTINCT,因为它无法比较。

var reportLoad = from dash in
                 (from rl in QVuser.QlikViewPermissions
                  join d in QVuser.QlikViewDashboards on rl.DashboardId equals d.DashboardId
                   where rl.UserId == user && rl.Active == true
                   group rl by new { DashName = d.DashboardName, DashProdLink = d.ProductionLink, DashTestLink = d.TestLink } into g
                   select new { DashName = g.Key.DashName, DashProdLink = g.Key.DashProdLink, DashTestLink = g.Key.DashTestLink })
                       select new
                       {
                            DashName = dash.DashName,
                            DashLink = (whichServer.UseProductionServer ? dash.DashProdLink : dash.DashTestLink)
                       };

this.DataList1.DataSource = reportLoad;
this.DataList1.DataBind();

3 个答案:

答案 0 :(得分:1)

问题出在你的group by条款中。

group rl by new { DashName = d.DashboardName, DashProdLink = d.ProductionLink, DashTestLink = d.TestLink } into g

by的{​​{1}}部分决定了每个组停止并且下一个组结束的时间。通常情况下,group by子句会像by一样简单,它会根据每个信息中心制作组。

d.DashboardName

或者,如果您确实想要使用复杂对象作为组密钥,则创建一个真实对象,而不是匿名对象,并在自定义对象中实现group d by d.DashboardName into g

IComparable<>

答案 1 :(得分:1)

我明白了。

var reportLoad =    from d in QVuser.QlikViewDashboards
                    orderby d.DashboardName
                    select new
                    {
                    DashName = d.DashboardName,
                    DashLink =
                             from dd in QVuser.QlikViewDashboards
                              join p in QVuser.QlikViewPermissions on d.DashboardId equals p.DashboardId
                              where p.UserId == user && p.Active == true
                              group dd by dd.DashboardName into g
                              select (whichServer.UseProductionServer ? d.ProductionLink : d.TestLink)
                    };

答案 2 :(得分:0)

也许你想在绑定之前尝试在reportLoad上调用ToList(),如:

this.DataList1.DataSource = reportLoad.ToList();

如果ToList出现错误,那么它在LINQ查询中就是一个问题,否则,它可能是数据列表的问题以及它如何访问您的数据。

HTH。