LINQ多條件OR模糊查詢
阿新 • • 發佈:2017-05-21
轉載 這樣的 .com 最終 () msdn soci table copy
需求是這樣的,有一張表tbl(Key[int],Value[string]),數據存儲如下:
Key | Value |
1 | -a-b- |
2 | -a- |
3 | -c-e- |
4 | -f-g- |
現在的目的是要從tbl表中取出所有Value字段的值和List的值匹配的記錄。本地有個List<string>{"a","b","c"};
傳統的T-SQL寫法是:select * from tbl where Value like ‘%a%‘ or Value like ‘%b%‘ or Value like ‘%c%‘ 如何用linq實現呢?
我第一個想到的是這樣的:
var query=from q in tbl select q;
foreach(var item in list) { query=query.Where(r=>r.Value.Contains(item)); }
但是這樣做生成的T_SQL語句是:select * from tbl where Value like ‘%a%‘ and Value like ‘%b%‘ and Value like ‘%c%‘
唉,真蛋疼,百度了好多全都無解,最後看到了一篇帖子,給了我點啟發,帖子鏈接如下:http://social.msdn.microsoft.com/Forums/de-DE/238/thread/b8ea22a7-f733-4ff5-8333-0dd3fe558076
經過思路整理,最終代碼如下:
class Program { static void Main(string[] args) { var dt = new DataTable(); dt.Columns.Add("Key", typeof (int)); dt.Columns.Add("Value", typeof (string)); dt.Rows.Add(1, "-a-b-"); dt.Rows.Add(2, "-a-"); dt.Rows.Add(3, "-c-e-"); dt.Rows.Add(4, "-f-g-"); var list = new List<string> {"a", "b", "c"}; var query = from q in dt.AsEnumerable() from t in list where q.Field<string>("Value").Contains(t) select q; var vdt = query.Distinct().CopyToDataTable(); foreach (DataRow dr in vdt.Rows) { Console.WriteLine(dr["Key"] + "\t" + dr["Value"]); } } }
大功告成,輸出結果如下:
1 -a-b-
2 -a-
3 -c-e-
轉載:
http://www.cnblogs.com/guyun/archive/2012/10/18/2729888.html
LINQ多條件OR模糊查詢