大半年没有来经营我的博客,非本人不勤快,是在创业,根本没有时间来,但此次有个小项目中,用到了linq to sql,既然这样,想必需要做多条件组合查询了,虽然我对表达式树的研究也只是寥寥地,但除此方法,似乎别无他法,只好硬着头皮研究一下.
本篇适合于规模较小的数据量,对于大数据量,需要用另外的方式,见下一篇
首先,从网上搜,是必不可少的,大概了解了一下linq 多条件组合查询的方向,就开始动手了,首先,写一个委托的方法:
代码
private
bool
GetCondition(FeedBack fb)
{
bool
boolResult
=
true
;
int
f_type
=
Int32.Parse(ddlFType.SelectedValue);
int
isClose
=
Int32.Parse(ddlIsClose.SelectedValue);
int
isTrue
=
Int32.Parse(ddlIsTrue.SelectedValue);
string
keyword
=
tbxKeyword.Text.FilterInjectStr();
if
(f_type
!=
0
)
{
boolResult
&=
fb.F_Type
==
f_type;
}
if
(isClose
!=
-
1
)
{
boolResult
&=
fb.IsClose
==
isClose;
}
if
(isTrue
!=
-
1
)
{
boolResult
&=
fb.IsTrue
==
isTrue;
}
if
(
!
keyword.IsNullOrEmpty())
{
boolResult
&=
fb.ContentInfo.IndexOf(keyword)
>
-
1
;
}
return
boolResult;
}
这里因为是做测试,我就全部把方法放在当前页面中了.
注意,此方法中的内容,可以根据实际情况进行改变,我这里做的是一个留言板的列表;
调用的方式,我这里列表是是绑定repeater控件的.
于是可以这样:
代码
private
void
ListDataBind()
{
Expression
<
Func
<
FeedBack,
bool
>>
expr
=
n
=>
GetCondition(n);
List
<
FeedBack
>
pageData
=
feedBacks.AllFeedBacks.Where(expr.Compile()).ToList();
FeedbackList.DataSource
=
pageData;
FeedbackList.DataBind();
}
注意,FeedBack是我的linq to sql的数据源表的对象名称.
另外,网站搜的一些答案有错误,例如会把我的Expression<Func<FeedBack,bool>>写成Expressionbool>>,NND,鄙视这些垃圾网站.还有写手.
希望各位初学者能从我的文章中获益!