DataSetTypé problèmes d'exceptions pour null avec LINQ.
Bonjour,
Actuellement j'utilise le DataSet généré à partir de ma table Sql Compact Edition. Tout marche pour le mieux pour un insert,un select basique. Maintenant je voudrai faire un formulaire de recherche donc avec des jointures entres tables.
Je me suis tourné vers le linq et voici ma requéte:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| var results = from Chats in db.AsEnumerable()
join Personnes in dbpersonnes.AsEnumerable()
on Chats.Id_propriétaire equals Personnes.id into lien
where Chats.Nom == "tama"
from subPersonnes in lien.DefaultIfEmpty()
select new
{
Numero_puce = (Chats.Numero_Puce==null? "" : Chats.Numero_Puce),
Race = (Chats.Race==null?"":Chats.Race),
Couleur = (Chats.Couleur==null?"":Chats.Race),
Nom = Chats.Nom,
Telephone = (subPersonnes == null ? "" : subPersonnes.Telephone)
}; |
Problème : le DataSet lève des exception quand la colonne est null (enfin pour etre exact DBnull). Or il semble ne pas vouloir dns le designer me mettre une string vide ou mettre null, je ne peu pas choisir autre chose que "throw exception".
C'est un probléme connu il semblerai. J'ai trouver ce post: http://blog.evolvedsoftwarestudios.c...yped-datasets/
Mais les solutions ne fonctionnent pas pour moi (ou en tout cas la modification de l'xml).
Je pense devoir faire la jointure à la main. Actuellement je fait la recherche de cet facon:
Code:
1 2 3 4 5 6 7 8
| DataRow[] foundRows;
foundRows = db.Select("Nom = 'toto'");
DataTable dtselect = db.Clone();
foreach (DataRow r in foundRows)
{
dtselect.ImportRow(r);
}
chatsBindingSource1.DataSource = dtselect; |
Donc je pense faire un select dans le select si j'ai l'id qui n'est pas vide.
Avez vous une solution pour le linq? ou alors une remarque sur mon select ou ma jointure manuel?
Autre petite question, actuellement je code tout dans mon controlleur, la recherche , l'ajout... le mieux sa serrai de crée un classe chat.cs par exemple et faire des méthodes non? L'utilisation de classe est simple?
Je débute encore en c# donc si vous avez des conseils je suis preneur.