gpt4 book ai didi

sql - 在 Linq 查询中将 join 与 String.Contains 结合使用

转载 作者:行者123 更新时间:2023-12-04 23:33:50 28 4
gpt4 key购买 nike

我有以下 linq 查询,用于在两个表之间创建左连接:

            var joinResultRows = from leftTable in dataSet.Tables[leftTableName].AsEnumerable()
join
rightTable in dataSet.Tables[rightTableName].AsEnumerable()
on leftTable.Field<string>(leftComparedColumnName) equals rightTable.Field<string>(rightComparedColumnName)
into leftJoinedResult
select new { leftTable, leftJoinedResult };

我想得到回答这个问题的行:
左列中的字符串值包含右列中的字符串值。

我试过这个:
            var joinResultRows = from leftTable in dataSet.Tables[leftTableName].AsEnumerable()
join
rightTable in dataSet.Tables[rightTableName].AsEnumerable()
on leftTable.Field<string>(leftComparedColumnName).Contains(rightTable.Field<string>(rightComparedColumnName)) equals true
into leftJoinedResult
select new { leftTable, leftJoinedResult };

但它不起作用,因为在连接的左侧无法识别 rightTable。

我如何创建导致 String.Contains 的连接,我是在“where”子句还是在“On”子句中执行包含?

最佳答案

你试过 SelectMany 吗?

var result =
from left in dataSet.Tables[leftTableName].AsEnumerable()
from right in dataSet.Tables[rightTableName].AsEnumerable()
where left.Field<string>(leftComparedColumnName).Contains(right.Field<string>(rightComparedColumnName))
select new { left, right };

编辑:

以下应该具有预期的效果:
class ContainsEqualityComparer: IEqualityComparer<string>
{
public bool Equals(string right, string left) { return left.Contains(right); }
public int GetHashCode(string obj) { return 0; }
}

var result =
dataSet.Tables[leftTableName].AsEnumerable().GroupJoin(
dataSet.Tables[rightTableName].AsEnumerable(),
left => left,
right => right,
(left, leftJoinedResult) => new { left = left, leftJoinedResult = leftJoinedResult },
new ContainsEqualityComparer());

关键比较通过自定义 IEqualityComparer 运行。两行只有在左右的GetHashCode()相同时才会合并,并且Equals返回true。

希望能帮助到你。

关于sql - 在 Linq 查询中将 join 与 String.Contains 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362609/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com