2015-02-11 1 views
0

Как преобразовать sql-запрос в linq с использованием datatable.sql "не в" в Linq с использованием данных datatable

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(); 
+0

Вы видели http://stackoverflow.com/q/857973/50447 - это должно быть просто случай корректировки набора элементов, и отрицая где условие. –

ответ

0

Вы также можете попробовать заполнить объект, а затем использовать объект, чтобы заполнить datatable.

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)); 

затем заполнить таблицу

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

Я предпочитаю, чтобы отделить первый

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, но Вы можете перевести легко И вы можете тоже различны с группой по запросу.

0

Чтобы написать SELECT DISTINCT targeturl from internal where TargetURL NOT in (select DISTINCT url from Internal) в выражении LINQ лямбда, вы можете использовать следующее:

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));

выше создает IEnumerable из URL-адресов, которые мы используем как исключение в предикате.

+0

Как использовать его с datatable? –

+0

Я использую этот способ, но все еще не получаю правильный результат. var List1 = dt.AsEnumerable(). Выберите (c => c.Field («URL»)). Distinct(). ToList(); var List2 = dt.AsEnumerable(). Выберите (c => c.Field («TargetURL»)). Distinct(). ToList(); var Targetname = List2.Except (List1.ToList()). ToList(); –

Смежные вопросы