Не удается преобразовать переменную запроса LINQ в DataTable

#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), совершенно другой домен.