使用linq将不同的数据绑定到转发器以对象不同

时间:2012-07-30 08:30:29

标签: c# linq 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'.

EDITED

这是转发器HTML

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

2 个答案:

答案 0 :(得分:1)

您已在此处选择了HotelArea

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

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

如果您需要数据源中的所有信息,而不是只是酒店区域,那么您需要MoreLINQ之类的DistinctBy

答案 1 :(得分:1)

好的,我在这里提出了答案。

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

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

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