问题描述
小弟,没有接触过linq,现在项目需要一个linq查询,还有点复杂。求大神指教。现有一个List<Marker>list数据源,Marker有(id,type【type1,type2,type3....】,status【status1,status2,status3.....】三个属性),根据List<string>typeList和List<string>statusList进行过滤(两个list可能只有一个,可能都存在,所以需要动态查询)。例如typeList={type1,type3};statusList={status1,status4}或者typeList为空statusList={status1}过滤List<Marker>list数据源得到resultList,怎么求得这个resultList。代码需要这样形式的:ParameterExpressionc=Expression.Parameter(typeof(Customer),"c");Expressioncondition=Expression.Constant(false);foreach(stringsinstarts){Expressioncon=Expression.Call(Expression.Property(c,typeof(Customer).GetProperty("CustomerID")),typeof(string).GetMethod("StartsWith",newType[]{typeof(string)}),Expression.Constant(s));condition=Expression.Or(con,condition);}Expressionbool>>end=Expression.Lambdabool>>(condition,newParameterExpression[]{c});
解决方案
本帖最后由 q107770540 于 2014-10-31 13:23:18 编辑
解决方案二:
解决方案三:
解决方案四:
参考我的。应该和我这个类似。
解决方案五:
贴出你的数据和预期的结果。如果你不能写Lambda,可以写SQL,帮你改写。如果你能写出Lambda,但是不会写表达式树,你可以先写好Lambda。帮你改写。
解决方案六:
LINQ查询结果绑定到DataList控件示例//DataList控件设置<asp:DataListID="DataList1"runat="server"><ItemTemplate><tablealign="center"cellpadding="0"cellspacing="0"width="543"><tr><tdclass="huise"><spanclass="shenlancu">『<%#DataBinder.Eval(Container.DataItem,"type")%>』</span><spanclass="banhui"><%#DataBinder.Eval(Container.DataItem,"title")%><br/></span><spanclass="banhui"> <%#DataBinder.Eval(Container.DataItem,"info")%><br/></span><spanclass="chengse"> 联系人:<%#DataBinder.Eval(Container.DataItem,"linkMan")%> 联系电话:<%#DataBinder.Eval(Container.DataItem,"tel")%></span></td></tr><trstyle="color:#000000"><tdalign="center"><imgheight="1"src="images/longline.gif"width="525"/></td></tr><trstyle="color:#000000"><tdheight="10"></td></tr></table></ItemTemplate></asp:DataList>//查询结果绑定protectedvoidPage_Load(objectsender,EventArgse){LinqDBDataContextlqDB=newLinqDBDataContext(ConfigurationManager.ConnectionStrings["db_LinQConnectionString1"].ConnectionString.ToString());//创建查询表达式varresult=fromuinlqDB.tb_infowhereu.ID>1selectnew{Type=u.type,Title=u.title,Info=u.info,LinkMan=u.linkman,Tel=u.tel};//绑定查询结果DataList1.DataSource=result;DataList1.DataBind();}