代码之家  ›  专栏  ›  技术社区  ›  somacore

FilterExpression问题-多个条件

  •  0
  • somacore  · 技术社区  · 14 年前

    我能够让开始和结束日期过滤器本身的工作,而且关键字搜索是自己的工作。我的问题是让这三个人一起工作。

    我使用的代码(如下)默认显示所有记录(良好),并在尝试筛选时执行以下操作:

    • 搜索关键字加日期范围:无记录

    下面是我现在的代码,它试图集成所有三个,但不起作用。任何建议都会有帮助:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:sermonConnectionString %>" 
    SelectCommand="SELECT ID, sermon_date, sermon_speakerfirst + ' ' + sermon_speakerlast AS Speaker, sermon_title, sermon_subtitle, sermon_notes FROM what ORDER BY sermon_date DESC"
    FilterExpression="([sermon_title] LIKE '%{0}%') AND ([sermon_date] >= '{1}' AND [sermon_date] <= '{2}')">
    <FilterParameters>
        <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" Type="DateTime" ConvertEmptyStringToNull="true" />
        <asp:ControlParameter ControlID="TextBox3" PropertyName="Text" Type="DateTime" ConvertEmptyStringToNull="true"/>
        <asp:ControlParameter ControlID="SermonSearch" PropertyName="Text" Type="String"/>
    </FilterParameters>
    </asp:SqlDataSource>
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   somacore    14 年前

    我只是想指出,我通过将日期/时间过滤器和关键字过滤器分成两个可搜索区域来“解决”这个问题。因为记录集没有那么大,所以在这个特定的实例中没有真正的理由可以按日期和关键字进行过滤。

        2
  •  0
  •   Mvg Developer    10 年前

    请参阅示例以获取带有日期范围筛选器的动态内容列表

    public virtual IQueryable<DynamicContent> GetBusinessItemsByExpiryDate(DateTime theDate, int thisPageNo, ref int? totalCount)
        {
            //ToDo: Use FilterExperssion for filtering rather than above; 
            int? itemsToSkip = 0;
            int? itemsPerPage = ItemsPerPageCount;
    
            string towncity = string.Empty; string strSectorID = string.Empty;
            //Guid sectorID;
            if (pageNo > 0)
            {
                itemsToSkip = itemsPerPage * (pageNo - 1);
            }
            DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
            Type businessItemType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Businesslisting.BusinessItem");
            var query = dynamicModuleManager.GetDataItems(businessItemType);
            System.Globalization.CultureInfo culture = null;
            culture = System.Globalization.CultureInfo.CurrentUICulture;
            FilterExpression = ContentHelper.AdaptMultilingualFilterExpressionRaw(FilterExpression, culture);
            string filterExpression = DefinitionsHelper.GetFilterExpression(FilterExpression, AdditionalFilter);
            filterExpression += "Visible = true AND Status = Live";
            if (theDate != DateTime.MinValue)
            {
                filterExpression += string.Format(" And ExpiryDate >= ({0}) AND ExpiryDate <= ({1})", theDate.AddDays(-14).ToString("yyyy/MM/dd"), theDate.AddDays(42).ToString("yyyy/MM/dd"));
            }
            SortExpression += "Title";
            query = DataProviderBase.SetExpressions<DynamicContent>(query, filterExpression, SortExpression, itemsToSkip, new int?(itemsPerPage ?? 0), ref totalCount);
            TotalItemCount = (int)totalCount;
            return query;
        }