【问题标题】:Bind distinct data to repeater using linq to object distinct使用 linq 将不同的数据绑定到转发器以区分不同的对象
【发布时间】:2012-07-27 21:42:16
【问题描述】:

我正在尝试根据 distinct 过滤记录。我使用了以下代码

List<BALHotelList> searchresult = (from a in bh
                                           join b in hr on a.HotelCode equals b.hotelCode
                                           orderby a.HotelName
                                           select new BALHotelList
                                               {
                                                   HotelCode = a.HotelCode,
                                                   ImageURL_Text = a.ImageURL_Text,
                                                   HotelName = a.HotelName,
                                                   StarRating = a.StarRating,
                                                   HotelAddress = a.HotelAddress,
                                                   Destination = a.Destination,
                                                   Country = a.Country,
                                                   HotelInfo = a.HotelInfo,
                                                   Latitude = a.Latitude,
                                                   Longitude = a.Longitude,
                                                   HotelArea=a.HotelArea,
                                                   totalPrice = b.totalPrice,
                                                   totalPriceSpecified = b.totalPriceSpecified,
                                                   totalSalePrice = b.totalSalePrice,
                                                   totalSalePriceSpecified = b.totalSalePriceSpecified,
                                                   rooms = b.rooms,
                                                   boardType = b.boardType

                                               }).ToList();

        var uniqueArea =searchresult.Select(m => m.HotelArea).Distinct();


  rptHotelArea.DataSource = uniqueArea;
        rptHotelArea.DataBind();

但它没有在数据源中找到 HotelArea。

但是当我调试它时,它会显示uniqueArea中的所有不同值

错误如下:

DataBinding: 'System.String' does not contain a property with the name 'HotelArea'.

已编辑

这里是转发器 HTML

  <asp:Repeater ID="rptHotelArea" runat="server">
        <ItemTemplate>
            <div class="sub-part1">
                <a href="#"><%#Eval("HotelArea")%></a></div>
        </ItemTemplate>
    </asp:Repeater>

【问题讨论】:

  • 请看一下这个问题的答案:stackoverflow.com/questions/5011617/….
  • @Serge +1 它的作品。在不同情况下是否将 null 视为唯一的另一件事
  • 是的,我想跳过空值
  • var uniqueArea =searchresult.Select(m => m.HotelArea).Where(m => m != null).Distinct();
  • 那么空字符串呢?请张贴您的 cmets 作为答案,以便我接受。它比乔恩答案更接近

标签: c# linq distinct


【解决方案1】:

您已经在这里选择了HotelArea

var uniqueArea = searchresult.Select(m => m.HotelArea).Distinct();

...所以在您的数据绑定中,您应该只选择值本身。

如果您需要数据源中的全部信息,而不仅仅是酒店区域,您需要来自MoreLINQDistinctBy 之类的信息。

【讨论】:

  • 是的,当我调试不同的 HotelArea 时,var uniqueArea 会向我显示字符串列表,但是当我将其绑定到转发器数据源时它会失败
  • @rahularyansharma:是的,因为我确定在您没有显示使用的代码中,您指定了一个绑定,它试图找到一个名为 HotelArea within 的属性每个值。
  • 我编辑了我的代码以显示 uniqueArea 的使用,请检查编辑部分
  • @rahularyansharma:对 - 看到 Eval("HotelArea") 位 - 这就是试图找到 HotelArea 部分的原因。到那时你已经得到了字符串;你只需要值本身...
  • 如何修改我的这个子句 var uniqueArea =searchresult.Select(m => m.HotelArea).Distinct();在数据源中获取 HotelArea 以便中继器工作
【解决方案2】:

好的,我已将答案移至此处。

第 1 部分: ASP.NET Repeater bind List<string>

第 2 部分: 跳过 null 和空字符串:

var uniqueArea =searchresult.Select(m => m.HotelArea).Where(m => !string.IsNullOrEmpty(m)).Distinct();

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多