Linq查询返回特定字段内的唯一值

时间:2014-01-02 20:56:50

标签: c# linq entity-framework

我有一个名为Post的基本classt(实体框架):

Public class Post
{
    Public int Id { get; set; }
    Public string Description { get; set; }
    Public string Tags { get; set; }
}

Tags属性包含帖子的标签列表(以逗号分隔)。

是否可以让Linq返回Post实体中存在的所有不同标签?

例如,如果我有:

  • 1:java,cobol,foxpro
  • 2:sybase,foxpro
  • 3:cobol,csharp

结果应该是:java,cobol,foxpro,sybase,csharp

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用Split()SelectMany()

来实现
posts.SelectMany(x => x.Tags.Split(',')).Distinct()

答案 1 :(得分:2)

您无法一步完成此操作,因为拆分和重新组合以逗号分隔的字符串所需要做的事情不会通过LINQ to Entities公开。您需要先撤回数据,然后处理标记。

var tags = db.Posts.Select(p => p.Tags)
             .Distinct() // let SQL save us a little work, if some posts have same sets of tags
             .ToList()   // this causes the query to execute
             .SelectMany(t => t.Split(',')) // this happens client-side
             .Distinct();