Привязка LINQ запрашивает к DataGridView

Это очень сбивает с толку, я использую AsDataView для привязки результата запроса с dgv, и он хорошо работает со следующим:

var query = from c in myDatabaseDataSet.Diamond where c.p_Id == p_Id select c;
dataGridView1.DataSource = query.AsDataView();

Однако эти результаты по Ошибке:

var query = from item in myDatabaseDataSet.Items
    where item.p_Id == p_Id
    join diamond in myDatabaseDataSet.Diamond
        on item.p_Id equals diamond.p_Id
    join category in myDatabaseDataSet.DiamondCategory
        on diamond.dc_Id equals category.dc_Id
    select new
    {
        Product = item.p_Name,
        Weight = diamond.d_Weight,
        Category = category.dc_Name
    };

    dataGridView1.DataSource = query.AsDataView();

Ошибка:

Instance argument: cannot convert from
'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 
'System.Data.DataTable'

AsDataView не обнаруживается в запросе. (Список). Почему это, происходят? Как связать запрос выше с dgv затем?.

10
задан Leniel Maccaferri 18 January 2012 в 05:59
поделиться

1 ответ

Сигнатура AsDataView выглядит следующим образом:

public static DataView AsDataView(
    this DataTable table
)

Единственным параметром является DataTable .

Ваш запрос возвращает IEnumerable анонимного типа, который не имеет неявного преобразования в DataTable (или последовательность экземпляров DataRow , в этом случае вы мог бы использовать это, чтобы помочь вам создать DataTable).

Вам нужно вернуть результаты в DataTable или что-то, что вы можете преобразовать в DataTable, и тогда все заработает.

В вашем конкретном случае кажется, что вы использовали (или используете) типизированные DataSet . В этом случае вы должны иметь возможность принимать выбранные значения, а затем создавать новые типизированные экземпляры DataRow (для вас должны быть фабричные методы), которые затем можно поместить в типизированную таблицу DataTable, которую можно вызвать AsDataView. .

4
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: