條件的生成都是通過對表中字段進行的。
比如:
Products._.UnitPrice > 1
Products._.CategoryID == 2
這些是簡單的比較。
下面來介紹通過like 模糊查詢該怎麼做。
先上代碼,
Products._.ProductName.Contain("apple")
這句等效sql就是(sqlserver) productname like ‘%apple%'
就是完全模糊搜索。
Products._.ProductName.BeginWith("apple")
這句等效sql就是(sqlserver) productname like ‘apple%',屬於左匹配,查找productname列中所有以apple開頭的。
Products._.ProductName.EndWith("apple")
這句等效sql就是(sqlserver) productname like ‘%apple',屬於右匹配,查找productname列中所有以apple結尾的。
再來看看 in 查詢
categoryid in (1,2,3) 類似該怎麼處理呢?
看下面的例子:
DbSession.Default.From<Products>()
.Where(Products._.CategoryID.SelectIn(1, 2, 3))
.ToList();
就是這麼處理的。
生成的sql:
Text:
SELECT * FROM [Products]
WHERE [Products].[CategoryID]
IN (@a5670053f4ae44f2a33eb5aaf54e9abf,@43f2ba0b559a45b38328b062c61f7caf,@4761cd088ce04ebf8d9670fb22417b8f)
Parameters:
@a5670053f4ae44f2a33eb5aaf54e9abf[Int32] = 1 @43f2ba0b559a45b38328b062c61f7caf[Int32] = 2 @4761cd088ce04ebf8d9670fb22417b8f[Int32] = 3
是不是符合要求了啊。
如果知道Products._.CategoryID類型,當然這裡是int
那推薦的寫法是:
DbSession.Default.From<Products>()
.Where(Products._.CategoryID.SelectIn<int>(1, 2, 3))
.ToList();
這樣可減少一次裝箱操作。
最終生成的sql也是一樣的。
not in 的方法是SelectNotIn
操作是一樣的。
如下:
DbSession.Default.From<Products>()
.Where(Products._.CategoryID.SelectNotIn<int>(1, 2, 3))
.ToList();
生成的sql
Text:
SELECT * FROM [Products]
WHERE [Products].[CategoryID]
NOT IN
(@a154584666f34bfaaa16bf8ede39774f,@7d3231666b19496f925a09b13d3541d0,@184523c709334fb299a736f4c402a163)
Parameters:
@a154584666f34bfaaa16bf8ede39774f[Int32] = 1 @7d3231666b19496f925a09b13d3541d0[Int32] = 2 @184523c709334fb299a736f4c402a163[Int32] = 3
這樣查詢是不是變的簡單了啊。
下一節將講述子查詢。