2010-07-14 4 views
11

Я пытаюсь получить различные строки на основе нескольких столбцов (attribute1_name, attribute2_name) и получить datarows из datatable с использованием Linq-to-Dataset.Выберите отдельные строки из datatable в Linq

Screenshot

Я хочу такие результаты этого Как сделать тонкий набор данных Linq-на-

attribute1_name attribute2_name 
--------------  --------------- 

Age    State 
Age    weekend_percent 
Age    statebreaklaw 
Age    Annual Sales 
Age    Assortment 

?

ответ

32

Если это не типизированный набор данных, то вы, вероятно, хотите сделать что-то вроде этого, используя методы расширения Linq-на-DataSet:

var distinctValues = dsValues.AsEnumerable() 
         .Select(row => new { 
          attribute1_name = row.Field<string>("attribute1_name"), 
          attribute2_name = row.Field<string>("attribute2_name") 
         }) 
         .Distinct(); 

Убедитесь, что в начале кода указан оператор using System.Data;, чтобы включить методы расширения Linq-to-Dataset.

Надеюсь, это поможет!

+0

Я использовал атрибут1_имя там, где я получаю дубликаты записей – James123

+0

@above Вы должны использовать «строку» во время строки. Я использовал какой-то другой объект datarow из моей другой петли, которая дала мне повторяющиеся значения. Позднее я исправил. – Hari

+0

Что делать, если есть 4 столбца в строке, и вы хотите отличать на основе двух столбцов? – Jogi

4

Как это: (Предполагая типизированный набор данных)

someTable.Select(r => new { r.attribute1_name, r.attribute2_name }).Distinct(); 
+0

Не вам еще нужно вызов AsEnumerable()? –

+0

@ Justin: Не для типизированного набора данных. Таблицы в типизированных наборах данных наследуют 'TypedTableBase ', который реализует 'IEnumerable '. – SLaks

+0

, пожалуйста, предоставьте мне ... как перебирать их – James123

0

Проверить ссылку

get distinct rows from datatable using Linq (distinct with mulitiple columns)

Или попробуйте этот

var distinctRows = (from DataRow dRow in dTable.Rows 
        select new { col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct(); 

EDIT: Размещенная недостающую первую фигурную скобку.

+0

Вы пропустили '{'. – SLaks

+0

@SLaks -Где должна быть фигурная скобка? – MAW74656

+1

@ MAW74656: Вокруг анонимного типа. – SLaks

3
var Test = (from row in Dataset1.Tables[0].AsEnumerable() 
      select row.Field<string>("attribute1_name") + row.Field<int>("attribute2_name")).Distinct(); 
0
Dim distinctValues As List(Of Double) = (From r In _ 
DirectCast(DataTable.AsEnumerable(),IEnumerable(Of DataRow)) Where (Not r.IsNull("ColName")) _ 
Select r.Field(Of Double)("ColName")).Distinct().ToList() 
+3

Добро пожаловать в переполнение стека! Не могли бы вы добавить некоторые рассказы, чтобы объяснить, почему этот код работает, и что делает его ответом на вопрос? Это было бы очень полезно для человека, задающего вопрос, и любого другого, кто приходит. –

0

Мы можем получить отчетливое аналогично примеру показано ниже

//example 
      var distinctValues = DetailedBreakDown_Table.AsEnumerable().Select(r => new 
      { 
       InvestmentVehicleID = r.Field<string>("InvestmentVehicleID"), 
       Universe = r.Field<string>("Universe"), 
       AsOfDate = _imqDate, 
       Ticker = "", 
       Cusip = "", 
       PortfolioDate = r.Field<DateTime>("PortfolioDate") 

      }).Distinct(); 
Смежные вопросы