用 WhereCondition 如何写 like 和 in 的查询条件

Oct 13, 2010 at 8:22 AM
Edited Oct 13, 2010 at 9:03 AM

请教三个问 WhereCondition 使用的问题:

1、如何实现in 查询

2、如何实现 like 查询

3、要组合一个多条件查询,每个条件直接是 AND 的关系,但有一个条件在内部是 OR的关系,如下面代码:

 

      foreach (var id in idlist)
      {
         cond |= CK.K["PID"] == id.ToString();
      }

按照现在这种写法最终生成的SQL是  SELECT *  FROM XXX  WHERE ID=1 AND NM='2' OR PID=1 OR PID=2 OR PID=3

这样的结果是错误的,期望的是        SELECT *  FROM XXX  WHERE ID=1 AND NM='2' AND ( PID=1 OR PID=2 OR PID=3) 

请问如何实现?

 

Coordinator
Oct 13, 2010 at 9:29 AM

1.

CK.K("Id").In(1,3,5,7,9)

2.

http://dbentry.codeplex.com/wikipage?title=Linq%20Support&referringTitle=Documentation

3.

Or 和 And 分开处理。

Oct 17, 2010 at 5:33 PM

借此帖问个问题:

Linq的in查询该如何实现

Coordinator
Oct 18, 2010 at 2:08 AM

目前还不支持Linq的In,准备做,不过我不喜欢DLINQ的实现方式,预计是这样的:

p => p.Id.In(1,3,5)

Oct 22, 2010 at 11:06 AM

感谢解答!

在使用CK.K来in查询时,发现并不是以DbParameter的形式传参的,而是简单的ToString()
导致了如果用于in查询的字段是varchar类型的,必须自行加单引号,例如:
Condition con = CK.K["Name"].In("'张三'""'李四'""'王五'");
var list = User.Find(con);

而且还存在了注入的风险,例如:
Condition con = CK.K["Name"].In("0) or (1=1");
var list = User.Find(con);

Coordinator
Oct 24, 2010 at 2:19 AM

是的,不是用参数方式实现的,其实是为了支持如下的方式:

CK.K["Id"].In("Select Id From Test Where Age > 18");

也许以后分成两个函数会比较好。