2011-05-24 4 views
1

D'abord, je vais décrire un peu ma structure de table. Il existe deux tables, FormField et Field.Comment résoudre ce problème distinct dans Linq?

Un champ peut être lié à plusieurs champs de formulaire, mais un champ de formulaire ne peut contenir qu'un seul champ.

J'ai donc cette requête LINQ:

var fields = from f in Data.Field.All() 
        join ff in formfields on f.Field_rid equals ff.Field_rid 
        select new 
        { 
         FormField = ff, 
         Field = f 
        }; 

Maintenant, je besoin de mettre une distincte quelque part là-dedans, mais je ne peux pas savoir où. Fondamentalement, je ne veux pas que le même champ me soit retourné plus d'une fois (donc je ne reçois jamais de champ en double). Où devrais-je utiliser la fonction distincte?

Répondre

1

Distinct ne semble pas vous aider si vous avez plusieurs formFields par field et que vous voulez recevoir seulement fields distinctes. Mais si vous pouvez penser à une méthode pour sélectionner un seul formField à partir des FormFields de tous les champs, alors il peut être facilement fait:

// assumimg that for all fields we want to receive only formField with minimum Field_rid 
var fields = Data.Field.All() 
       .Select(f => new 
        { 
         Field = f, 
         FormField = formFields 
             .Where(ff => ff.Field_rid == f.Field_rid) 
             .OrderBy(ff => ff.Field_rid) 
             .FirstOrDefault(), 
        }); 
+0

qui est la solution que je cherchais. Et FirstOrDefault est bien car il ne devrait jamais (en théorie) plus d'un champ lié à chaque champ de formulaire. – Earlz

+0

Si c'est le cas, vous pouvez le limiter en remplaçant 'FirstOrDefault()' par 'Single()' pour tester si votre théorie est toujours pertinente. – Snowbear