2012-05-05 27 views
-2

我有一個前端,包括2欄,關鍵字1和關鍵字2在數據庫中,他們在一個單獨的字段稱爲關鍵字(由,分隔)。現在我有有一個關鍵詞是自動完成的文本框中輸入搜索屏幕,現在爲了填充它,我需要從數據庫獲取單個值,所以我有這樣的事情,如何從逗號分隔的DB中選擇不同的值?

Keywords 
A 
A 
A,B 
B,C 
C,E 
D,K 

現在爲了填充它們作爲一個listItem我需要類似的東西。

Keywords 
A 
B 
C 
D 
k 

因此,前端不包含和複製它。我沒有太多的SQL專家,我知道的一種方法就是從DB獲取不同的值,如%entered keywords%,並使用LINQ使用逗號分隔它們,然後獲取不同的值。但那將是一條漫長的道路。

任何建議將不勝感激。

在此先感謝。

+2

您的數據庫架構有問題。您應該將關鍵字存儲在單獨的表格中,然後製作一個將您的關鍵字與特定事物關聯起來的交叉引用表格。 –

+0

數據庫中逗號分隔的值是否保存了逗號? – HW90

+0

@ HW90實際上,前端的關鍵字1和關鍵字2都會將其合併,並以逗號分隔,並進入一個爲關鍵字的數據庫字段。 – Vishal

回答

1

也許有點晚,但具有不同的關鍵字結束了另一種答案:

List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" }); 

var splitted = yourKeywords 
    .SelectMany(item => item.Split(',')) 
    .Distinct(); 

這不會直接對着幹儘管數據庫。在執行SelectMany之前,您必須將數據庫內容讀入內存,因爲Split在SQL中沒有相同的內容。它會看起來像

var splitted = db.Keywords 
    .AsEnumerable() 
    .SelectMany(item => item.Split(',')) 
    .Distinct(); 
+0

感謝Mike the第一部分是非常有幫助的,是的,我創建了一個列表並循環數據讀取器,並將每個項目添加到此列表中並進一步對其執行操作。 – Vishal

1

使用字符串分割和LINQ組,讓他們通過

 List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" }); 
     List<string> splitted = new List<string>(); 
     yourKeywords.ForEach(x => splitted.AddRange(x.Split(','))); 
    var t = splitted.GroupBy(x => x);