猿问

LINQ多表动态查询?

最近做LINQ的一个测试工作,需要把多表的SQL动态条件查询转为LINQ的查询.

string strSQL="SELECT A.ORDER,B.ORDITM,A.ORDDAT,A.ORDTIM,B.PRICE FROM A JOIN B ON A.ORDER=B.ORDER JOIN C ON B.PN=C.PN ";

if(chkOrderDate.Checked == true)

{

strSQL+=" A.ORDDAT BETWEEN '"+fromDate.Text.Trim()+"' AND ''"+toDate.Text.Trim()+" ";

}

if(chkOrderNumber.Checked==true)

{

strSQL+=" A.ORDER='"+txtOrderNumber.Text.Trim()+"' ";

}

....送给DB执行.

请教如何转为LINQ动态查询.

现在已经建立LINQ To SQL 的datacontext

 LQ_DBDataContext LQ_DB = new LQ_DBDataContext(ConnectionString);

varPO=from a in LQ_DB.A

           from b in LQ_DB.B on A.ORDER equals B.ORDER

           from c in LQ_DB.C on B.PN equals C.PN

          where A.ORDER==txtOrderNumber.Text.Trim() && A.ORDDAT>=Convert.ToInt32(fromDate.Text.Trim()) &&  A.ORDDAT<=Convert.ToInt32(toDate.Text.Trim())

          select new {

              A.ORDER,

             B.ORDITM,

            A.ORDDAT,

            A.ORDTIM,

            B.PRICE

          };

//WHERE条件是不对的.应该是实际选择的条件, USER选择的条件不一样, LINQ中的WHERE中的条件应该不一样, 会得出来不同的处理结果. 请教圈子中的高人如何写这样的多表变量条件查询动态LINQ ?

绝地无双
浏览 409回答 5
5回答

一只斗牛犬

比较好用的就是 老外写的一个 LINQ dynamic.cs PS:LINQ 的动态查询不是很好。

摇曳的蔷薇

Linq的动态查询可以选择三目运算简单方便 例如: where (string.IsNullOrEmpty(regName.Text.Trim()) ? true : a.name.Contains(regName.Text))  && (string.IsNullOrEmpty(regTime1.Text.Trim()) ? true : a.pdate.Value > regtime1转换日期后的值)   && (string.IsNullOrEmpty(regTime2.Text.Trim()) ? true : a.pdate.Value <regtime2转换日期后的值) 前面加条件 如果条件成立则返回true不做筛选条件 如果条件不成立则执行筛选 我只是判断是否为空  你可以加你自己的条件 应该明白了吧

慕桂英3389331

so great.这样写太easy了.感谢!

繁星淼淼

厉害...我怎么没有想到呢.
随时随地看视频慕课网APP
我要回答