2010-07-20 4 views
3

Как написать этот запрос с LINQ в базу данных FoxPro?Преобразование результатов запроса LINQ в DataTable

SELECT count(*) FROM Table group by item1 

Я написал его, как показано ниже, но это не работает

Dim Query 

Dim dt As New DataTable 

Dim da = New Odbc.OdbcDataAdapter("SELECT * FROM table1",connection) 
da.Fill(dt) 

Query = (From row In dt.AsEnumerable Select row_ 
      Group By item1 = row.Item(6) Into_  
     count = Count(row.Item(6))).ToList 

Следующая строка работает:

Dim q = From p In dt Group p By item = p.Item(6) Into count = Count() 

Как я могу связать результаты вышеупомянутого запроса к Вид сетки? К сожалению, установка q в качестве DataSource не работает

grid.DataSource= q 

я обнаружил, что я Шоуда связать его таким образом

Dim table As DataTable = q.ToDataTable() 
    DataGridView1.DataSource = table 

, но я и др ошибка, как этот

'copytodatatable' is not a member of 'System.Collections.Generic.IEnumerable 

, что эта ошибка относится к?

+0

Что именно не работает? – codymanix

+0

Мне нужен результат «SELECT count (*) FROM Table group by item1», но мой предыдущий запрос возвращает другой результат. а также я хочу привязать результат к datagride. например grid.datasource = Запрос. но это доцентная работа. слишком. – Mahsa

ответ

0

Ваш запрос тянет каждую запись вниз ... если вы хотите, граф, вы можете просто сделать ...

select COUNT(*) from Table1 

или, явно имя столбца результата подсчета ...

select COUNT(*) as CountOfRecords from Table1 

Если вы хотите намеренно тянуть все записи вниз и знать, сколько фактических записи в наборе результатов (полный стол, или где применяется оговорка) ... вы можете получить результаты от

int TotalRecords = dt.Rows.Count 

Моя плохо ... группа по п ...

select item, count(*) as TotalPerItem from Table1 group by item 

Затем dt.Rows.Count бы, сколько «ITEMS» были возвращены в список ... Вы бы тогда быть в состоянии для прокрутки записей на элемент и их соответствующего подсчета для этого элемента.

+0

, но этот запрос не считается в группах? это? он возвращает результат в одной группе. – Mahsa

0

Изменить следующую строку

Dim table As DataTable = q.ToDataTable() 

в

Dim table As DataTable = q.ToDataTable().AsEnumerable() 

, то вы можете попробовать его связывания с GridView

DataGridView1.DataSource = table  
DataGridView1.DataBind() 
2

Вы можете пропустить DataTable все вместе и использовать LINQ to VFP.

2

Я искал дни и, наконец, наткнулся на эту замечательную функцию, написанную Лусом Оливейрой, которая преобразует результат LINQ в DataTable. (Article) Реальная функция:

Public Function EQToDataTable(ByVal parIList As System.Collections.IEnumerable) As System.Data.DataTable 
    Dim ret As New System.Data.DataTable() 
    Try 
     Dim ppi As System.Reflection.PropertyInfo() = Nothing 
     If parIList Is Nothing Then Return ret 
     For Each itm In parIList 
      If ppi Is Nothing Then 
       ppi = DirectCast(itm.[GetType](), System.Type).GetProperties() 
       For Each pi As System.Reflection.PropertyInfo In ppi 
        Dim colType As System.Type = pi.PropertyType 
        If (colType.IsGenericType) AndAlso 
         (colType.GetGenericTypeDefinition() Is GetType(System.Nullable(Of))) Then colType = colType.GetGenericArguments()(0) 
        ret.Columns.Add(New System.Data.DataColumn(pi.Name, colType)) 
       Next 
      End If 
      Dim dr As System.Data.DataRow = ret.NewRow 
      For Each pi As System.Reflection.PropertyInfo In ppi 
       dr(pi.Name) = If(pi.GetValue(itm, Nothing) Is Nothing, DBNull.Value, pi.GetValue(itm, Nothing)) 
      Next 
      ret.Rows.Add(dr) 
     Next 
     For Each c As System.Data.DataColumn In ret.Columns 
      c.ColumnName = c.ColumnName.Replace("_", " ") 
     Next 
    Catch ex As Exception 
     ret = New System.Data.DataTable() 
    End Try 
    Return ret 
End Function 

Он вызывается:

dim q = [linq query you write] 
Dim dt as DataTable = EQToDataTable(q) 
Смежные вопросы