如何从DB中选择以逗号分隔的不同值?

时间:2012-05-05 19:28:47

标签: c# asp.net sql linq

我的前端包括2列,关键字1和数据库中的keywords2,它们位于一个名为keywords的字段中(由,分隔)。现在我有一个搜索屏幕,其中有一个关键字作为自动完成文本框,现在为了填充它我需要从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 :(得分:1)

使用字符串拆分和Linq group by

获取它们
        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);

答案 1 :(得分: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之前,您必须将DB内容读入内存,因为Split在SQL中不具有等效性。它看起来像

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