none
Error en consulta Linq sobre un datatable

    Pregunta

  • Buenas, tengo una consulta Linq (he de decir que soy un novato en Linq). Esta consulta la hago sobre un datatable.

    Código:

    var
    
     result = from
    
     DataRow myRow in
    
     dtProgSem.Rows
                 where
    
    (int
    
    )myRow[0] == Convert.ToInt32(dr[9].ToString())
                 select
    
     myRow;
    

    El error está en dtProgSem.Rows, aparece el siguiente mensaje:

    Could not find an implementation of the query pattern for source type 'System.Data.DataRowCollection'. 'Cast' not found. Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?

    He intentado añadir la referencia System.Core pero no la encuentro.

    Alguna idea?

     

    Muchas gracias

    miércoles, 31 de marzo de 2010 11:28

Respuestas

  • La referencia al System.Core debería venir ya puesta en la plantilla predeterminada cuando creas el proyecto con Visual Studio. Si no te sale, mira a ver si es que has creado el proyecto para Framework 2.0. Si es así, efectivamente en esa versión no hay imlementación de Linq-to-ado.net.
    • Marcado como respuesta chisigo martes, 6 de abril de 2010 7:27
    lunes, 5 de abril de 2010 9:54
    Moderador

Todas las respuestas

  • Hola prueba este bloque a ver si te funciona....

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     private void Form1_Load(object sender, EventArgs e)
    {
    
        DataTable dt = new DataTable();
        dt.Columns.Add("a");
        dt.Columns.Add("b");
        DataRow r;
        for (int i=0; i<1000;i++)
        {
    
            r = dt.NewRow();
            r[0] = i.ToString();
            r[1] = i.ToString();
            dt.Rows.Add(r);
        }
        
        var res = from DataRow a in dt.Rows
                  where (Convert.ToInt32(a[0])%2 == 0)
                  select a;
        MessageBox.Show(res.ToList().Count.ToString());
                
        
    
    
    }


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 31 de marzo de 2010 11:34
    Moderador
  • No me funciona, pasa exactamente lo mismo. Estoy usando VS 2010 RC podría ser por eso?
    miércoles, 31 de marzo de 2010 11:59
  • Yo estoy utilizando la misma y me funciona perfectamente....

    Comprueba que tienes los mismos using.... y todo eso...

     

    ME parece raro la verdad que no te funcione...


    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi Blog: Jtorrecilla
    Enlace a Faq de Winforms en Ingles Muy bueno
    miércoles, 31 de marzo de 2010 12:04
    Moderador
  • La referencia al System.Core debería venir ya puesta en la plantilla predeterminada cuando creas el proyecto con Visual Studio. Si no te sale, mira a ver si es que has creado el proyecto para Framework 2.0. Si es así, efectivamente en esa versión no hay imlementación de Linq-to-ado.net.
    • Marcado como respuesta chisigo martes, 6 de abril de 2010 7:27
    lunes, 5 de abril de 2010 9:54
    Moderador
  • Gracias Alberto Poblacion, lo he pasado al framework 4.0, he reiniciado el proyecto y ya he podido añadir el using System.Linq;
    martes, 6 de abril de 2010 7:18