2013-03-05 11 views
10

ich eine Linq-Abfrage, die die GridView auf Page_Load auffüllt. Ich habe eine for Schleife von Zeichen für das Alphabet gemacht. Im .Command der LinkButton, die die LinkButton auffüllt, leite ich eine sehr ähnliche Abfrage der gleichen Parameter in der Abfrage und die unten stehenden Fehler.Anonym Typ Erscheint in beiden Fehler

vom Typ '<> f__AnonymousType2' sowohl existiert in 'ConcernContracts.dll' und 'System.Web.WebPages.Deployment.dll'

void lnkCharacter_Command(object sender, CommandEventArgs e) 
{ 
    try 
    { 
     var lbtn = (LinkButton)lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument); 
     var id = lbtn.Text; 

     using (var db = new dbDataContext()) 
     { 
      var query = from n in db.tbl_Providers 
         where ((n.provider_Name.StartsWith(id)) && (n.provider_Deleted == false)) 
         select new 
         { 
          n.ProviderId, 
          n.provider_Name 
         }; 

      grd_Provider.DataSource = null; 
      grd_Provider.DataSource = query; 
      grd_Provider.DataBind(); 
     } 
    } 
    catch (SystemException ex) { } 
} 

The Loadgrid() die gleiche ist, aber es verwendet nicht die Bedingung. Haben Sie Ideen, wie Sie den Fehler beheben können?

Der Fehler wirft keine Ausnahme, aber es das Raster für eine der beiden Abfragen nicht füllen. Der Fehler wurde in der folgenden Zeile entdeckt: grd_Provider.DataSource = query;

+0

Sind die Projekte in der gleichen Lösung? Haben sie den gleichen Namensraum? –

+1

Rebuild, Clean, Build. – Bastardo

+0

Ja, sie sind in der gleichen Lösung. Die Abfragen befinden sich auf derselben Seite. – StudentRik

Antwort

2

ändern leicht binded wird das Raster Datenquelle

grd_Provider.DataSource = query.ToList(); 
grd_Provider.DataBind(); 

oder erstellen Liste mit zwei Eigenschaften Provider Id und Name und binden Sie diese Liste aus der Ausgabe wie folgt.

List<Entities> abc=query.ToList(); 
grd_Provider.DataSource =abc; 
grd_Provider.DataBind(); 
1

Hier ist ein Vorschlag:

Ihre zwei ähnlichen Fragen werden wahrscheinlich an diesem anonymen Typ überlappende Sie in der LINQ-Abfrage auswählen. Auf einer und nur einer der Abfragen, ändern Sie die ausgewählte neue wie folgt aussehen:

select new 
     { 
     Id = n.ProviderId, 
     Name = n.provider_Name 
     }; 

Wenn Sie dies tun, sollten die anonyme Typen nicht mehr in Konflikt geraten, da die, die Sie nicht ändern die verwenden Standardnamen.

Viel Glück, und ich hoffe, das hilft!

+0

Ich habe ein anderes Gitter auf der Seite erstellt und versucht, dieses Gitter auszugeben, aber es funktioniert auch nicht. Ich fragte mich, ob es war, dass die Abfrage bereits auf dem 'LoadGrid()' ausgeführt wurde, weshalb sie nicht gefüllt wurde. Ich brauche eine andere Art, diesen Filter zu erreichen. – StudentRik

0

Convert es ein in List oder IEnumberable, kann man einfach nicht anonyme Objekte als Datenquelle übergeben zu gridview. query.ToList();

Sie können den Rückgabetyp

IEnumerable<object> 

wandeln es jede anonyme Art halten kann und als Datenquelle

+0

Können Sie das erklären? [Linq ist IEnumerable.] (Http://msdn.microsoft.com/en-us/library/bb397919.aspx) 'Der Begriff" LINQ to Objects "bezieht sich auf die Verwendung von LINQ-Abfragen mit IEnumerable oder IEnumerable Sammlung direkt ' – Harrison

-1

Linq nicht einige Funktionen wie .toDays unterstützen() ,. AddDays() ,. Starts(). Also, was Sie tun müssen, ist, zunächst das Ergebnis erhalten, ohne .StartsWith mit(), dann versuchen einige Funktionen anzuwenden, um Ergebnis Starts perticular id zu filtern.

0

Ich hatte das gleiche Problem, und ich fügte hinzu, es eine andere Eigenschaft auf die anonyme Art und aufgelöst.