2012-01-12 2 views
2

У меня есть объекты коллекции родитель ребенка и задавался вопросом, как получить один элемент из коллекции ребенка с помощью LinqLinq - Выберите один элемент из коллекции детского

Родитель Коллекция

Public Class FaultCodeModel 

    Public Property ID As Short 
    Public Property Description As String 
    Public Property FaultCodeDetails As List(Of FaultCodeDetailModel) 

End Class 

Детский Коллекция

Public Class FaultCodeDetailModel 

    Public Property ID As Short 
    Public Property Description As String 
    Public Property NotifyPurchasing As Boolean 
    Public Property NotifyPurchasingAfterHits As Short 
    Public Property NotifyExpediting As Boolean 
    Public Property NotifyExpeditingAfterHits As Short 
    Public Property NotifyBuyer As Boolean 
    Public Property NotifyBuyerAfterHits As Short 
    Public Property NotifySupplier As Boolean 
    Public Property NotifySupplierAfterHits As Short 
    Public Property NotiifyProPack As Boolean 
    Public Property NotiifyProPackAfterHits As Short 
    Public Property NotifyGoodsInTeamLeader As Boolean 
    Public Property NotifyGoodsInTeamLeaderAfterHits As Short 

End Class 

Я пробовал нижний запрос Linq, но он возвращает несколько дочерних элементов, в которых сопоставлено поле родительского идентификатора.

Dim var = From fcd In FaultCodes Where fcd.FaultCodeDetails.Any(Function(w) w.ID.Equals(faultCodeDetailID)) 
      Select fcd.FaultCodeDetails 

Как я могу получить один элемент из детской коллекции?

ответ

4
Dim fcdID = 4711 
Dim fcdm = (From fc In FaultCodes 
      From fcd In fc.FaultCodeDetails 
      Where fcd.ID = fcdID 
     Select fcd).FirstOrDefault 

http://msdn.microsoft.com/en-us/library/bb340482.aspx

+0

Думайте, что отсутствует замыкающая скобка из Any. куда он идет? –

+0

Спасибо Тиму, что получил его –

3

Я думаю, что вы хотите, чтобы это:

FaultCodes.SelectMany(Function(w) w.FaultCodeDetails) 
      .Where(Function(w) w.ID.Equals(faultCodeDetailID)) 

Это возвращает все дочерние элементы которых ID равен faultCodeDetailID.

(Я C# парень, возможно, синтаксис VB.NET откусил Пожалуйста, исправьте сами.)


C версии #:

FaultCodes.SelectMany(x => x.FaultCodeDetails) 
      .Where(x => x.ID == faultCodeDetailID) 
+0

Не работает. Можете ли вы опубликовать C#, и я конвертирую? –

+0

@PhilMurray: Добавлена ​​версия C# и исправлена ​​версия VB.NET. –

+1

Это также работает, спасибо. Вот правильный Vb Dim var = FaultCodes.SelectMany (Функция (x) x.FaultCodeDetails) .Where (Функция (x2) x2.ID.Equals (faultCodeDetailID)) –

0

Попробуйте следующее

Dim Obj = (yourcollection).Where(Function(c) c.FieldName.ToString() = "YourValue").FirstOrDefault() 
Смежные вопросы