【问题标题】:LINQ JOIN with different data types具有不同数据类型的 LINQ JOIN
【发布时间】:2017-04-06 17:45:00
【问题描述】:

我有一种情况,我试图在 2 个表上进行连接。

表一有以下内容:

 User       ID
 john       1 
 mary       3
 tim        4

表2有以下内容:(注意表2中的ID是逗号分隔的,注意表2中的每个ID都是唯一的。)

company         ID
 100           '150', '4', '9'   
 101           '102','2', '10'

正如您在表 2 的第一行中看到的那样,与用户 tim 匹配,因为他们都有 4 个,因此公司 100 是关联的。

问题在于 LINQ 我不确定如何在这两个表之间进行连接。

【问题讨论】:

  • 要清楚,表2有一个逗号分隔的值列表?
  • 是的,没错。
  • 这是现有系统还是新系统?如果是新的,为什么不为这种固有的多对多关系使用中间映射表?
  • 这是一个现有系统。表 2 中的每个 ID 都是唯一的。
  • 最好的办法可能是创建一个视图,以更好地规范化表 2 中的数据。

标签: linq


【解决方案1】:

您可以拆分您的公司表 ID 并将它们格式化为更易读的列表:

var companiesReadableList =
            companies.SelectMany(x => x.ID.Replace("'", "").Split(',').Select(y => new {ID = y.Trim(), company = x.company}));

剩下的就是加入用户表:

var joinedView = users.Join(companiesReadableList, user => user.ID.ToString(), company => company.ID,
            (user, company) => new {user.user, user.ID, company.company});

希望对你有帮助

【讨论】:

    【解决方案2】:

    尝试使用带单引号的like 子句

    var res = from Table1
    join Table2 
    on SqlMethods.Like(Table1.Id , '\'' + Table2.Id + '\'')
    select ....
    

    我无法对此进行测试,但我的答案基于this

    如果 linq-to-sql 应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多