Rod*_*iko 4 sql linq string join contains
我有以下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 };
Run Code Online (Sandbox Code Playgroud)
我想获得回答这个的行:左列中的String值包含右列中的字符串值.
我试过这个:
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 };
Run Code Online (Sandbox Code Playgroud)
但它不起作用导致在连接的左侧无法识别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 };
Run Code Online (Sandbox Code Playgroud)
编辑:
以下应该具有所需的效果:
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());
Run Code Online (Sandbox Code Playgroud)
密钥比较通过自定义IEqualityComparer运行.只有当左边和右边的GetHashCode()相同时才会连接两行,而Equals返回true.
希望能帮助到你.
| 归档时间: |
|
| 查看次数: |
6636 次 |
| 最近记录: |