2013-09-19 2 views
2

Я не знаю, что мое название вопроса подходит для моей ситуации. Ниже мой вопрос. Ниже приведены мои классы.Как получить количество элементов в коллекции с помощью LINQ

Public Class Employee 
public Name As String 
public ID as String 
public SaleDivs as List(of SalesDivision) 
End Class 

Public Class SalesDivision 
public Name As String 
public ID as String 
public SaleLocations as List(of SaleLocation) 
End Class 

Public Class SaleLocation 
public Name As String 
public ID as String 
End Class 

У меня есть список Employess. В этом списке расположение продаж может быть назначено нескольким сотрудникам, а сотрудник может иметь несколько мест продаж.

Как найти количество сотрудников, назначенных для определенного места продажи, используя Linq.

Я использую .NET CE Framework 3.5.

Заранее спасибо.

ответ

2

Вы можете использовать несколько статей From (a.k.a. SelectMany).

Учитывая следующий пример данных:

Dim loc1 = New SaleLocation With { .Name = "Location1" }  
Dim loc2 = New SaleLocation With { .Name = "Location2" }  
Dim div1 = New SalesDivision With { .Name = "Div1", .SaleLocations = New List(Of SaleLocation) From { loc1 }} 
Dim div2 = New SalesDivision With { .Name = "Div2", .SaleLocations = New List(Of SaleLocation) From { loc2 }} 
Dim div3 = New SalesDivision With { .Name = "Div3", .SaleLocations = New List(Of SaleLocation) From { loc1, loc2 }} 

Dim emp1 = New Employee With { .Name = "Harry", .SaleDivs = New List(Of SalesDivision) From { div1 }} 
Dim emp2 = New Employee With { .Name = "Marry", .SaleDivs = New List(Of SalesDivision) From { div2 }} 
Dim emp3 = New Employee With { .Name = "Larry", .SaleDivs = New List(Of SalesDivision) From { div3 }} 

Dim employees = New List(Of Employee) From { emp1, emp2, emp3 } 

вы можете использовать следующий запрос:

Dim result = From employee in employees 
      From division in employee.SaleDivs 
      From location in division.SaleLocations 
      Where location.Name = "Location2" 
      Select employee Distinct 

и получить счетчик:

Dim numberOfLocation2Employees = result.Count() 

В вашем реальном коде вам, вероятно, используйте поле ID вместо Name.

Смежные вопросы