2012-02-06 42 views
2

有誰知道如何做到這一點用ID的字符串表示,尋找我試着上述和沒有工作爲我的風格格式。我有一個字符串是「1,2,3,4,5」,它代表我正在查找的ID ...但是該字符串不會被識別爲對於SQL語法通常是IN語句的單獨ID ...LINQ語法來匹配動態SQL IN語句

string IDs = "1,2,3,4,5"; 
var recs = from tb1 in c2d where new[]{IDs}.Contains(tb1.RID) select tb1; 

我知道我的字符串工作在SQL語法,特設如下...

string sSql = "select * from table where IDs in ("+ IDs + ")"; 
exec sql; 

我只是在尋找一些等同於保持我synatx快速和骯髒的

回答

2

如果你需要使用一個字符串,你必須將其分割成一個數組並在將字符串值轉換爲int之後才能使用它。

string IDs = "1,2,3,4,5"; 
var recs = from tb1 in c2d 
      where IDs.Split(',') 
       .Select(x => int.Parse(x)) 
       .Contains(tb1.RID) 
      select tb1; 

如果可以使用一個int數組直接而不是字符串,這將是優選

1

優選地,定義ID作爲用於O(1)查找一個HashSet:

string IDs = "1,2,3,4,5"; 
HashSet<string> set = new HashSet<string>(IDs.Split(',')); 
var recs = from tb1 in c2d where set.Contains(tb1.RID) select tb1; 

或者如果RIDint

string IDs = "1,2,3,4,5"; 
HashSet<int> set = new HashSet<int>(IDs.Split(',').Select(int.Parse).ToArray()); 
var recs = from tb1 in c2d where set.Contains(tb1.RID) select tb1; 
4

你需要把是s在int陣列特林數據和使用Contains()查詢:

int[] ids = new [] {1,2,3,4,5}; 
var recs = from tb1 in c2d where ids.Contains(tb1.RID) select tb1; 
2

分割字符串成它的組分,然後你可以使用Contains

var validIds = IDs.Split(',').Select(int.Parse).ToList(); 
var recs = c2d.Where(tb1 => validIds.Contains(tb1.RID)); 

(我假設RIDint財產...)