Linq To Sql使用拼接字符串问题

macpc 2010-11-17 10:46:34
我一字符串,根据某些条件拼接出特定的值

string stwhere = " where" + ViewState["city"].ToString() + ViewState["price"].ToString() + ViewState["area"].ToString() + ViewState["ca"].ToString() + ViewState["propertypype"];

var query = from hdata in db.HHHH
//这里怎么把上面的stwhere放在这做为条件?
orderby hdata.CreateDate descending
select hdata;
...全文
408 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdk123 2010-11-19
  • 打赏
  • 举报
回复
linq学习中!
机器人 2010-11-18
  • 打赏
  • 举报
回复
恩,不错不错。
q107770540 2010-11-18
  • 打赏
  • 举报
回复

var query = from hdata in db.HHHH
orderby hdata.CreateDate descending
select hdata;
if(ViewState["city"] !=null)
{
query=query.Where(q=>q.city==ViewState["city"].ToString());
}
if(ViewState["price"] !=null)
{
query=query.Where(q=>q.price==ViewState["price"].ToString());
}
//再多的条件都可以这样写
//利用LINQ的延迟查询特性

参考:http://blog.csdn.net/q107770540/archive/2010/07/09/5724013.aspx
机器人 2010-11-18
  • 打赏
  • 举报
回复
BTW: 动态SQL实在不是Linq的强项,刚才还看到一篇Blog,为了生成动态SQL写了一大篇幅代码。
当然System.Linq.Dynamic类是这个方面的改进。但是这样看来,我还不如用iBatis,直接SQL + <isNullOrEmpy>标签来得省力。
机器人 2010-11-18
  • 打赏
  • 举报
回复
有两个方案,

第一种动态拼SQL,需要用System.Linq.Dynamic类。

参考: http://www.cnblogs.com/tianyamoon/archive/2008/01/26/1053905.html

可以直接用 db.HHHH.Where("...") 方式查询。
当然这个字符串要根据条件拼好。
优点是生成SQL查DB。缺点是拼SQL代码多。

第二种直接是全查出来后的结果再过滤。

举例:

var area = ViewState["city"].ToString();
var city = ViewState["price"].ToString();

var query = from hdata in db.HHHH
where (string.IsNullOrEmpty(area) ? true : (hdata.area == area))
&& (string.IsNullOrEmpty(city) ? true : (hdata.city == city))
// ... 还有的也类似,如果为空该条件永远为true
select e;

缺点是DB全都进内存里再过滤。



macpc 2010-11-17
  • 打赏
  • 举报
回复
是要全查,例如我6个条件,只有4个条件,其它2个条件我是全查,这个语句如何写?

[Quote=引用 6 楼 fangxinggood 的回复:]

引用 4 楼 macpc 的回复:
回复2楼,
如果这样写死的话,其中一个条件为null 或 string.Empty 那执行条件不是有错?


那就是查不到值了,为什么会出错。除非你有这样的要求:如果为null/empty的时候,就要全查。
[/Quote]
机器人 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 macpc 的回复:]
回复2楼,
如果这样写死的话,其中一个条件为null 或 string.Empty 那执行条件不是有错?
[/Quote]

那就是查不到值了,为什么会出错。除非你有这样的要求:如果为null/empty的时候,就要全查。
harderLi 2010-11-17
  • 打赏
  • 举报
回复
string stwhere = " where" + ViewState["city"].ToString() + ViewState["price"].ToString() + ViewState["area"].ToString() + ViewState["ca"].ToString() + ViewState["propertypype"];

var query = from hdata in db.HHHH
where hdata.city=viewState["city"].tostring()
orderby hdata.CreateDate descending
select hdata;
macpc 2010-11-17
  • 打赏
  • 举报
回复
回复2楼,
如果这样写死的话,其中一个条件为null 或 string.Empty 那执行条件不是有错?
huakaiwusheng233 2010-11-17
  • 打赏
  • 举报
回复
我也想知道。。。
机器人 2010-11-17
  • 打赏
  • 举报
回复
是不是这样?

var query = from hdata in db.HHHH
hdata.city == ViewState["city"] &&
hdata.price == ViewState["price"] &&
...
orderby hdata.CreateDate descending
select hdata;
netboool 2010-11-17
  • 打赏
  • 举报
回复
var query = from hdata in db.HHHH where hdata.xxx == stwhere
//这里怎么把上面的stwhere放在这做为条件?
orderby hdata.CreateDate descending
select hdata;

8,493

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧