【问题标题】:Distinct not comparable error when binding LINQ query to asp:DataList将 LINQ 查询绑定到 asp:DataList 时出现明显的不可比较错误
【发布时间】:2011-05-12 10:48:52
【问题描述】:

我在下面的 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();

【问题讨论】:

    标签: c# asp.net sql linq


    【解决方案1】:

    问题出在您的group by 子句中。

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

    group byby 部分决定了每个组何时停止以及下一个组何时结束。通常,by 子句会很简单,例如 d.DashboardName,它将根据每个仪表板进行分组。

    group d by d.DashboardName into g
    

    或者,如果您真的想使用复杂对象作为组键,则创建一个真实对象,而不是匿名对象,并在您的自定义对象中实现 IComparable<>

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

    【讨论】:

    • 如果我只使用group d by d.DashboardName into g,我该如何做我的案例陈述?
    【解决方案2】:

    我想通了。

    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)
                        };
    

    【讨论】:

      【解决方案3】:

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

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

      如果 ToList 出错,则它是 LINQ 查询中的问题,否则,可能是数据列表及其访问数据的方式的问题。

      HTH。

      【讨论】:

        猜你喜欢
        • 2015-08-30
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-03
        • 1970-01-01
        • 2013-11-11
        相关资源
        最近更新 更多