C# FilterExpression问题-多个条件
我有一个asp.net c#网站,我正在用Visual Web Developer Express Edition 2010开发。在这个网站上,我有一个FilterExpression,它应该过滤三个条件:开始日期、结束日期和关键字搜索 我可以让开始和结束日期过滤器自己工作,而且关键字搜索也可以自己工作。我遇到的麻烦是让这三者一起工作 我正在使用的代码(以下)默认显示所有记录(良好),并在尝试筛选时执行以下操作:C# FilterExpression问题-多个条件,c#,asp.net,C#,Asp.net,我有一个asp.net c#网站,我正在用Visual Web Developer Express Edition 2010开发。在这个网站上,我有一个FilterExpression,它应该过滤三个条件:开始日期、结束日期和关键字搜索 我可以让开始和结束日期过滤器自己工作,而且关键字搜索也可以自己工作。我遇到的麻烦是让这三者一起工作 我正在使用的代码(以下)默认显示所有记录(良好),并在尝试筛选时执行以下操作: 搜索关键字:所有记录 搜索关键字加日期范围:无记录 仅日期范围:所有记录 下面
- 搜索关键字:所有记录
- 搜索关键字加日期范围:无记录
- 仅日期范围:所有记录
<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>
我只是想指出,我通过将日期/时间过滤器和关键字过滤器分为两个可搜索区域来“解决”这个问题。因为记录集并没有那么大,所以在这个特定实例中没有真正的理由能够按日期和关键字进行筛选 请查看示例以获取带有日期范围筛选器的动态内容列表
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;
}
public虚拟IQueryable GetBusinessItemsByExpiryDate(DateTime theDate,int thisPageNo,ref int?totalCount)
{
//ToDo:使用FilterExpersion进行过滤,而不是上述操作;
int?itemsToSkip=0;
int?itemsPerPage=itemsPerPage计数;
string towncity=string.Empty;string strestorId=string.Empty;
//Guid扇区ID;
如果(页码>0)
{
itemsToSkip=itemsPerPage*(第1页);
}
DynamicModuleManager DynamicModuleManager=DynamicModuleManager.GetManager();
类型businessItemType=TypeResolutionService.ResolveType(“Telerik.Sitefinity.DynamicTypes.Model.Businesslisting.BusinessItem”);
var query=dynamicModuleManager.GetDataItems(businessItemType);
System.Globalization.CultureInfo culture=null;
文化=System.Globalization.CultureInfo.CurrentUICulture;
FilterExpression=ContentHelper.AdapteMultilanguageFilterExpressionRaw(FilterExpression,区域性);
string filterExpression=DefinitionsHelper.GetFilterExpression(filterExpression,AdditionalFilter);
filterExpression+=“可见=真实,状态=活动”;
if(theDate!=DateTime.MinValue)
{
filterExpression+=string.Format(“And ExpiryDate>=({0})和ExpiryDate请在标题中保留类似“Asp.net C#”的标记-只需使用这些标记即可。