Это очень сбивает с толку, я использую 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 затем?.
Сигнатура AsDataView выглядит следующим образом:
public static DataView AsDataView(
this DataTable table
)
Единственным параметром является DataTable .
Ваш запрос возвращает IEnumerable анонимного типа, который не имеет неявного преобразования в DataTable (или последовательность экземпляров DataRow , в этом случае вы мог бы использовать это, чтобы помочь вам создать DataTable).
Вам нужно вернуть результаты в DataTable или что-то, что вы можете преобразовать в DataTable, и тогда все заработает.
В вашем конкретном случае кажется, что вы использовали (или используете) типизированные DataSet . В этом случае вы должны иметь возможность принимать выбранные значения, а затем создавать новые типизированные экземпляры DataRow (для вас должны быть фабричные методы), которые затем можно поместить в типизированную таблицу DataTable, которую можно вызвать AsDataView. .