#c# #linq #linq-to-sql #datatable
#c# #linq #linq-to-sql #datatable
Вопрос:
У меня есть следующий код:
var _permiso = from P in _db.clsPermiso
select P;
var _pagina = from P in _db.clsPagina.AsEnumerable()
select P;
var _perfil = from P in _db.clsPerfil
select P;
IEnumerable<DataRow> query = from permiso in _permiso.AsEnumerable()
join perfil in _perfil.AsEnumerable()
on permiso.ID equals perfil.ID
join pagina in _pagina.AsEnumerable()
on permiso.ID equals pagina.ID
where (permiso.Acceso == true) amp;amp; (permiso.Perfil.ID == Convert.ToInt32(strIDPerfil))
select pagina;
Я собирал некоторую информацию на странице MSDN, и она подсказывает мне использовать IEnumerable<DataRow>
, а затем назначить эту query
переменную в переменную с данными, например:
DataTable _dtResult = query.CopyToDataTable();
Но я получаю ошибку в select pagina
инструкции:
Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<MyApp.Models.clsPagina>' to 'System.Collections.Generic.IEnumerable<System.Data.DataRow>'. An explicit conversion exists (are you missing a cast?)
Спасибо за совет
Комментарии:
1. это класс, который я получаю из MVC3
public class MyAppDB : DbContext { public DbSet<clsPagina> clsPagina { get; set;} }
2. Этого не произошло, это выдало мне следующую ошибку
Error 1 Cannot convert type 'MyApp.Models.clsPagina' to 'System.Data.DataRow'
Ответ №1:
Преобразование перечислимых не обязательно использует неявные преобразования, которые используют базовые типы. Вероятно, вам придется явно привести результат «pagina» в качестве потока данных в вашем запросе LINQ.
Не зная ваших определений классов / типов, я только предполагаю, но я полагаю, что вы хотите, чтобы ваша последняя строка вашего запроса LINQ была:
select (DataRow)pagina;
Есть ли конкретная причина, по которой вы хотите, чтобы результат был более примитивным?
Комментарии:
1. Уже попробовал это приведение, оно выдает следующую ошибку
Error 1 Cannot convert type 'MyApp.Models.clsPagina' to 'System.Data.DataRow'
2. Хорошо, и теперь, читая ваши другие комментарии, я уверен, вы получаете эти данные из класса Entity Framework? EF не ADO.NET . Это совершенно разные способы доступа к данным. Не могли бы вы дать нам ссылку на страницу MSDN, которую вы читаете? Я думаю, вы пытаетесь объединить две разные технологии.
3. Мне нужно было в DataTable зациклить его в Foreach, idk, если вместо этого я должен использовать список…
4. Я использую доступ к данным на SQL Server 2008, это не должно быть ошибкой… Вот ссылка на страницу MSDN
5. @Cuartico, страница, на которую вы ссылаетесь, посвящена Linq-to-DataSet . Ваши модели — это Linq-to-Sql (или EF), совершенно другой домен.