2009-06-03 16 views
0

Ich bin neu bei LINQ und versuche, meine Business-Schicht (BLL), d. Ich habe mir einige Beispiele angeschaut, aber keine scheint mir in meinem Szenario zu helfen.LINQ Expression Help - Abfrage meines Objektmodells

Sagen wir, ich beginne mit einer Methode/erstellen, würde ich denken:

public void GetLinqQuery() 
{ 
EmployeeCollection employeeList = EmployeeController.GetAll(); // my usual way of getting employee list 

// now I'll attempt using LINQ to get a subset of that collection 
var query = from emp in employeeList 
    select emp.FirstName,  // *** Intellisense breaks here, why? 
} 

Bin ich etwas falsch? Wie kann ich meine Sammlungen/Entitäten abfragen, wenn ich Objekte habe?

Danke!

Antwort

0

Wenn ich das richtig bin interpretting, sieht es aus wie Sie versuchen zu tun:

var query = from emp in employeeList 
    select emp.FirstName, emp.LastName; 

, die nicht funktionieren. Sie müssen es als ein neues Objekt wählen, entweder anonym oder einige benannten Typ:

var query = from emp in employeeList 
    select new { emp.FirstName, emp.LastName }; 
Console.WriteLine(query.First().FirstName); 

Wenn Ihre Absicht ist es, die Abfrage an die aufrufende Funktion zurück Sie eine benannte Art zu verwenden, benötigen, wie anonyme Typen können Verlasse den Bereich, in dem sie sich befinden:

return from emp in employeeList 
    select new EmployeeData(emp.FirstName, emp.LastName); 
+0

Funktioniert perfekt - danke! –

0

Es wäre wahrscheinlich einfacher, einen IEnumerable<Employee> oder IQueryable<Employee> zu verwenden. Versuchen Sie Folgendes:

public void GetLinqQuery() 
{ 
IEnumerable<Employee> employeeList = EmployeeController.GetAll() as IEnumerable<Employee>; 

var query = from Employee emp in employeeList 
      select emp.FirstName  // Does intellisense break now? 
} 
+0

Warum wäre das einfacher? Zu guter Letzt implementieren meine Sammlungen: IBindingListView, die wiederum von IEnumerable abgeleitet werden. –

+0

OK - nun, ich war mir nicht sicher, ob Ihre Sammlung IEnumerable implementiert hat, aber wenn dies der Fall ist, wird es keinen Unterschied machen. Wenn du das Komma eingibst, bekommst du kein Intellisense oder davor? –

0

Wenn Sie den folgenden Code

Employee[] Employees= GetEmployee(); 
var query = 
from c in Employees 
select c.Name; 

erzeugt der Compiler den Code schreiben:

Employee[] Employees= GetEmployee(); 
IEnumerable<Employee> query = 
Employees.Select(c => c.Name); 

So können Sie eine beliebige der oben verwenden ..

Auch Sie können typisierte Liste Sammlung

verwenden
List<Employee> Employees = query.ToList();