Linq to SQL [Résolu]

bcazard 18 Messages postés lundi 8 novembre 2004Date d'inscription 26 avril 2010 Dernière intervention - 23 juin 2009 à 18:24 - Dernière réponse : krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention
- 24 juin 2009 à 16:59
Baptiste
Bonjour à tous,
Je développe actuellement pour ma société une appli c#(sous Microsoft Visual C# 2008 Express) avec une DB distante sous Microsoft SQL Server 2005 standard.
Pour le traitement des données je souhaite utiliser la technologie Linq qui, en vu des différents posts, a l'air puissante.
Pour tester "Linq" j'ai suivi le tuto de odahan http://www.csharpfr.com/tutoriaux/PRESENTATION-LINQ-AVEC-CSHARP_784.aspx

Au niveau de SQL Server j'ai une DB "ma_base" qui contient une table "ma_table".
j'ai donc créé une class pour mapper cette table:

using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace mon_namespace
{
public class TableContext : DataContext
{

public Table<ma_table_mapping> Table;

public ServiceContext(string fileOrServerOrConnection)
: base(fileOrServerOrConnection)
{}
}

[Table(Name="ma_table")]
public class ma_table_mapping
{
private int my_Id;
[Column(IsPrimaryKey = true, Name = "id", Storage = "my_Id")]
public int Id
{
get{return this.my_Id;}
set{this.my_Id = value;}
}

private string my_Libelle;
[Column(Name="libelle",Storage = "my_Libelle")]
public string Libelle
{
get{return this.my_Libelle;}
set{this.my_Libelle = value;}
}
}
}

Ensuite sur un formulaire j'ai fais le test suivant:

private void TestLinq()
{
TableContext aTableContext = new TableContext (Program.STR_DB_CONNEXION);
aTableContext.Log = Console.Out; // affiche le SQL sur la console
var query = aTableContext.Table; // requête ultra simple: toute la table
ObjectDumper.Write(query); // affiche le résultat
Console.ReadLine();
}

Le résultat est correcte :
Id=1 Libelle=Libelle1
Id=2 Libelle=Libelle2
Id=3 Libelle=Libelle3
SELECT [t0].[id] AS [Id], [t0].[libelle] AS [Libelle]
FROM [ma_table] AS [t0].

Par contre si, par exemple, je ne veux que le libelle ca ne passe plus a la compil:
private void TestLinq()
{
TableContext aTableContext = new TableContext (Program.STR_DB_CONNEXION);
aTableContext.Log = Console.Out; // affiche le SQL sur la console
var query = From lib in aTableContext.Table select Libelle;
ObjectDumper.Write(query); // affiche le résultat
Console.ReadLine();
}

Erreur de compil:
Impossible de trouver une implémentation du modèle de requête pour le type source 'System.Data.Linq.Table<mon_namespace.ma_table_mapping>'. 'Select' introuvable. Une référence à 'System.Core.dll' ou une directive using pour 'System.Linq' est-elle manquante ?

Je ne trouve pas de solution, merci d'avance pour votre aide.</mon_namespace.ma_table_mapping></ma_table_mapping>
Afficher la suite 

4 réponses

Répondre au sujet
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 24 juin 2009 à 16:59
+3
Utile
Dans ce cas, désolé de ma remarque. C'est juste que j'ai vu dans tes using System.Data.Linq mais pas System.Linq. Et ce petit détail m'avait déjà donné une erreur proche de la tienne si ce n'est identique.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de krimog
bcazard 18 Messages postés lundi 8 novembre 2004Date d'inscription 26 avril 2010 Dernière intervention - 23 juin 2009 à 18:33
0
Utile
Bonjour à tous,
Je développe actuellement pour ma société une appli c#(sous Microsoft Visual C# 2008 Express) avec une DB distante sous Microsoft SQL Server 2005 standard. Pour le traitement des données je souhaite utiliser la technologie Linq qui, en vu des différents posts, a l'air puissante. Pour tester "Linq" j'ai suivi le tuto de odahan http://www.csharpfr.com/tutoriaux/PRESENTATION-LINQ-AVEC-CSHARP_784.aspx
Au niveau de SQL Server j'ai une DB "ma_base" qui contient une table "ma_table".
J'ai donc créé une class pour mapper cette table:
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace mon_namespace
{
public class TableContext : DataContext
{
public Table<ma_table_mapping>;
public ServiceContext(string fileOrServerOrConnection) : base(fileOrServerOrConnection) {}
}

[Table(Name="ma_table")]
public class ma_table_mapping
{
private int my_Id;
[Column(IsPrimaryKey = true, Name = "id", Storage = "my_Id")]
public int Id { get{return this.my_Id;} set{this.my_Id = value;} }

private string my_Libelle;
[Column(Name="libelle",Storage = "my_Libelle")]
public string Libelle { get{return this.my_Libelle;} set{this.my_Libelle = value;}
}
}

Ensuite sur un formulaire j'ai fais le test suivant:
private void TestLinq()
{
TableContext aTableContext = new TableContext (Program.STR_DB_CONNEXION);
aTableContext.Log = Console.Out; // affiche le SQL sur la console
var query = aTableContext.Table; // requête ultra simple: toute la table
ObjectDumper.Write(query); // affiche le résultat Console.ReadLine();
}

Le résultat est correcte :
Id=1 Libelle=Libelle1
Id=2 Libelle=Libelle2
Id=3 Libelle=Libelle3
SELECT [t0].[id] AS [Id], [t0].[libelle] AS [Libelle] FROM [ma_table] AS [t0].

Par contre si, par exemple, je ne veux que le libelle ca ne passe plus a la compil:
private void TestLinq()
{
TableContext aTableContext = new TableContext (Program.STR_DB_CONNEXION);
aTableContext.Log = Console.Out; // affiche le SQL sur la console
var query = From lib in aTableContext.Table select Libelle;
ObjectDumper.Write(query); // affiche le résultat
Console.ReadLine();
}

Erreur de compil:
Impossible de trouver une implémentation du modèle de requête pour le type source 'System.Data.Linq.Table'. 'Select' introuvable. Une référence à 'System.Core.dll' ou une directive using pour 'System.Linq' est-elle manquante ?

Je ne trouve pas de solution, merci d'avance pour votre aide.
Commenter la réponse de bcazard
krimog 1863 Messages postés lundi 28 novembre 2005Date d'inscription 14 février 2015 Dernière intervention - 24 juin 2009 à 10:51
0
Utile
Salut
L'erreur parle d'elle même.

Ajoute using System.Linq; à ton fichier, et, si elle n'y est pas déjà, ajoute une référence à System.Core.dll dans ton projet.

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
Commenter la réponse de krimog
bcazard 18 Messages postés lundi 8 novembre 2004Date d'inscription 26 avril 2010 Dernière intervention - 24 juin 2009 à 16:52
0
Utile
Salut,
merci de ta réponse, mais j'ai bientot 10 ans de .NET donc si ce n'etait que ça je n'aurais pas demandé d'aide ;).
Il n'y a pas de probleme pour récupérer la table complete => le linq se fait correctement(en tout cas le résultat est cohérant avec ma DB).

C'est sur des requetes de type:
var query = from lib in aTableContext.Table ... que ça plante:
Impossible de trouver une implémentation du modèle de requête pour le type source 'System.Data.Linq.Table'.
Commenter la réponse de bcazard

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.