2010-09-01 3 views
0

J'essaye de construire une chaîne contenant les valeurs des champs d'un objet linq to sql. la chose est, je veux seulement saisir les champs qui ne sont pas nulslinq to sql sélectionne uniquement les données des colonnes de l'objet qui ne sont pas nulles

Je suis sûr qu'il y a un moyen de le faire. quelqu'un peut-il m'éclairer?

mylinqdatacontext dc = new mylinqdatacontext; 
StringBuilder sb = new StringBuilder(); 
mylinqtype item = (from x in dc.mylinqtypes where x.id.equals(1)).single(); 
var props = typeof(mylinqtype).GetProperties(); 

foreach(PropertyInfo p in props){ 

    if(item... != null){ 
    sb.append(p.name + " :" + item[p].value; //or some such i dont really know 
    } 
} 

toute aide appréciée

j'ai essayé

object theValue = p.getgetmethod().invoke(item, null); 

mais il a jeté un System.Reflection.TargetException grâce

nat

Répondre

1

Ce n'est pas testé, mais je pense qu'il devrait vous fermer au moins:

SomeDataContext dc = new SomeDataContext(); 
StringBuilder sb = new StringBuilder(); 

SomeItem item = (from x in dc.SomeItems where x.SomeItemId == 1 select x).Single(); 
PropertyInfo[] props = item.GetType().GetProperties(); 

foreach (PropertyInfo p in props) 
{ 
    if (p.CanRead) // might need more tests here for various attributes of the property 
    { 
     object val = p.GetValue(item, null); 

     if (val != null) 
     { 
      sb.Append(p.Name + " : " + val); 
     } 
    } 
} 
+0

merci, a bien fonctionné en fait je pense que ma version initiale aurait probablement travaillé aussi, mais je me suis rendu compte que je n'avais pas le .first() /. Single() doh! – nat

0
using (var dc = new DataContext()) 
{ 
    var result = dc.Entities.Where(x => c.Column != null).Select(x => x.Column) 
       .Aggregate((x, y) => x + y); 
} 
+0

L'affiche veut créer une représentation de chaîne d'une entité, mais seulement les propriétés non nulles seront inclus. Je ne sais pas où vous allez avec votre requête. – Marc

Questions connexes