2010-01-12 5 views
1
 List<NastavaIzvjestaj> nastava_izvjestaj = new List<NastavaIzvjestaj>(); 
     var data_context = new DataEvidencijaDataContext(); 
     int pomSum = 0; 

     var prisustvo = (from j in data_context.nastava_prisustvos 
       select j.br_indexa).Distinct(); 
     var lista = prisustvo.ToList(); 

     foreach (var i in prisustvo) 
     { 
      var pom = from k in data_context.nastava_prisustvos 

         where k.br_indexa == i 
         select k.broj_casova; 

      pomSum = pom.Sum(); 

      nastava_izvjestaj.Add(new NastavaIzvjestaj 
      { 
       br_indexa = i.br_indexa, 
       naziv = "mjau", 
       ime = "First Name", 
       prezime = "Last Name", 
       tip_nastave = "XXX", 
       procenat_prisustva =pomSum 
      }); 
     } 

      string reportPath = Server.MapPath("NastavaPrikaz.rpt"); 

      ObjektniNastavaIzvjestaj = new ReportDocument(); 
      ObjektniNastavaIzvjestaj.Load(reportPath); 
      ObjektniNastavaIzvjestaj.SetDataSource(nastava_izvjestaj); 
      CrystalReportViewer1.ReportSource = ObjektniNastavaIzvjestaj; 

Ce code de retour quelque chose comme ceci:LINQ problème sélection (distinct)

  Br_idexa  Ime   Prezime   Procenat 

      185    First Name Last Name   30 
      185    First Name Last Name   30 
      185    First Name Last Name   30 
      185    First Name Last Name   30 

Comment puis-je obtenir qu'une seule ligne:

  185    First Name Last Name   30 
problème

est résolu

+0

Êtes-vous sûr que vos lignes de j sont réellement distincts (dans tous leurs domaines)? Vous devrez peut-être effectuer une projection, par ex. j.ID, j.SomethingElse, pour obtenir les champs que vous voulez 'distincts'. – Paddy

+0

J'ai besoin distinct par br_indexa mais ne sais pas comment – Ognjen

Répondre

4

Dans votre requête, vous pouvez sélectionner la colonne que vous souhaitez sélectionner distincte sur:

var prisustvo = (from j in data_context.nastava_prisustvos 
        select j.br_indexa).Distinct(); 
+0

J'ai mis à jour le code et écrire de nouveaux problèmes – Ognjen

1

Essayez d'ajouter une classe partielle pour votre NastavaIzvjestaj qui fait:

namespace ... 
public partial class NastavaIzvjestaj 
{ 
    public override bool Equals(object o) 
    { 
     if (o == null || !(o is NastavaIzvjestaj)) 
     return false; 

     return this.Br_idexa == o.Br_idexa; 
    } 

    public override int GetHashCode() 
    { 
     return this.Br_idexa.GetHashCode(); 
    } 
} 

Fournir que Br_idexa est votre identifiant unique et pk.

+0

comment je l'utilise dans mon code posté – Ognjen

+0

Ajouter une nouvelle classe appelée NastavaIzvjestaj.cs dans le même projet que le concepteur; Chaque objet LINQ est une classe partielle et le mot clé partial vous permet de "compléter" la définition de classe. L'espace de noms ... signifiait que je ne savais pas quel espace de noms appartenait à LINQ to SQL, et fournissait donc le même espace de noms. –