【问题标题】:How to Join with a column having Comma Separated Values in Linq如何在 Linq 中加入具有逗号分隔值的列
【发布时间】:2015-12-03 16:10:36
【问题描述】:

我有一个主表类别。

ID | Name
----------
1  | Category1
2  | Category2
3  | Category3
4  | Category4

另一个表详细信息有类似的字段

ID | CategoryId | Detail
--------------------
1  | 1,2,3      | Test1
2  | 3,4        | Test2

此处的类别 ID 存储为逗号分隔值。 现在我想要结果为

ID | CategoryName
----------------
1  | Category1,Category2,Category3
2  | Category3,Category4

任何人有想法..??

【问题讨论】:

  • 我强烈建议您规范化您的数据。
  • 但我做不到,这是我项目的要求。
  • 与您的经理或技术主管一起审查它们。这将在未来引发更多问题。作为一种解决方法,您可以创建一个拆分字符串函数将字符串拆分为行,将它们与类别连接,然后再次连接它们。但这是在 SQL Server 中完成的。这只是解决您的问题的方法。不是解决方案。
  • 好的,谢谢@EvaldasBuinauskas
  • 设计不应该是这样的。我建议,数据应该是标准化的。因为它会产生很多问题。

标签: c# .net asp.net-mvc linq linq-to-sql


【解决方案1】:

你可以使用这个链接:

   private static void commaSeperate(List<classname> obj)
    {
        string delimeter = ",";
        Console.WriteLine(obj.Aggregate((i, j) => new classname { Name = (i.Name + delimeter + j.Name) }).Name);
        Console.ReadKey();
    }

这只是一个示例,请根据您的情况进行修改。

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    如果我们先将数据检索到内存中,这可能是解决方案。

    var q = from d in Details
    from m in Master
    select new {Id = d.Id, CategoryName = String.Join(m.Where(i=> d.CategoryId.Split(',').Cast<int32>().Contains(i.Id).Select(i => i.Name).ToArray(), ',')}
    

    【讨论】:

    • 我收到类似 Invalid arguments for String.Join @Toni 的错误
    • Jep,因为这仅对内存查询有效。也就是您必须提前检索您的主数据和详细数据(作为通用列表)并在这些列表上进行操作。
    【解决方案3】:

    您不能加入这两个表,但我认为下面的查询将适用于您的结果:

    (from de in datacontextobj.Details
    from ca in datacontextobj.Category
    where de.CategoryId.Contains(ca.ID)
    select de.ID, ca.Name).ToList();
    

    【讨论】:

    • 但我需要逗号分隔的类别名称@ShilpaSoni
    • 你能发布我的查询返回的内容吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2016-05-14
    • 2022-07-07
    相关资源
    最近更新 更多