sql "not in" 在 Linq 中使用数据表

sql "not in" in Linq using datatable

如何使用数据表将 sql 查询转换为 linq。

select DISTINCT targeturl from internal where TargetURL NOT in (select DISTINCT url from Internal)

使用此查询,但仍然没有得到正确的结果。

  var List1 = dt.AsEnumerable().Select(c => c.Field<string>("URL")).Distinct().ToList();
  var List2 = dt.AsEnumerable().Select(c => c.Field<string>("TargetURL")).Distinct().ToList();
  var Targetname = List2.Except(List1.ToList()).ToList();

我更喜欢分开 第一个

dim query = (from u in Internal select u.url).distinct

第二

dim tmp = (from t in Interal where not query.contains(TargetURL) select TargetURL ).ToList

它在 VB.net 但您可以轻松翻译 你也可以根据要求区分不同的组。

要在 linq lambda 表达式中写入 SELECT DISTINCT targeturl from internal where TargetURL NOT in (select DISTINCT url from Internal),您可以使用以下内容:

var result = Internal .Select(a => a.TargetURL) .Where(a => !Internal.Select(i => i.url).Distinct().Contains(a.TargetURL));

或将其分解为: var distinctUrls = Internal.Select(i => i.url).Distinct(); var result = Internal.Select(a => a.TargetUrl) .Where(a => !disctinctUrls.Contains(a.TargetUrl));

上面创建了一个 URL 的 IEnumerable,我们将其用作 where 谓词中的排除项。

您也可以尝试填充一个对象,然后使用该对象填充数据table。

var data = Select(c => c.Field<string>("TargetURL")).Distinct().ToList();
Datatable dtMyTable = new Datatable();
dtMytable.Columns.Add("col1",typeof(string));
dtMytable.Columns.Add("col2",typeof(string));
dtMytable.Columns.Add("col3",typeof(string));

然后填充 table

foreach (var item in data)
{
      dtMytable.Rows.Add(data.col1,data.col2,data.col3);
}