2011-04-14 58 views
2

我正在使用RIA服務。我需要選擇一個具有多個相關子實體(UnitOccupierDetails)的父實體(UnitOccupier)。我需要過濾子實體以返回單個記錄。我該怎麼做呢?如何篩選相關的兒童記錄

var q = from uo in _unitOccupierContext.GetUnitOccupierQuery() 
     where uo.UnitOccupierDetails.???? 
            ---> I cant get to the child properties here 

感謝

回答

3

不能包括選定父的過濾子集。你只能包括完整的收集或沒有任何兒童收藏。如果您想查詢孩子的,包括他們的父母(在評論質疑有關)

var q = (from uo in _unitOccupierContext.GetUnitOccupierQuery() 
     select new { 
      Parent = uo, 
      Childs = uo.UnitOccupierDetails 
         .Where(uod => uod.MyDetailsProp == MyDetailsValue) 
     }).FirstOrDefault(); 

if (q != null) 
{ 
    UnitOccupier selectedUnitOccupier = q.Parent; 
    selectedUnitOccupier.UnitOccupierDetails = q.Childs.ToList(); 
    // selectedUnitOccupier now only contains the filtered childs 
} 

編輯

你可以:但作爲一個變通方法,您可以使用一箇中間匿名類型,像這樣使用方法:

var q = _unitOccupierContext.GetUnitOccupierQuery() 
     .SelectMany(uo => uo.UnitOccupierDetails 
          .Where(uod => uod.MyDetailsProp == MyDetailsValue)) 
     .Include(uod => uod.UnitOccupier) 
     .FirstOrDefault(); // or .ToList() if you expect more than one record 
// q is now null or a single UnitOccupierDetails entity 
// with a reference to its parent 

我這裏假設你的UnitOccupierDetails類有一個導航屬性到父UnitOccupier

+0

我可以查詢孩子幷包含父母嗎? – Greg 2011-04-14 17:00:25

+0

@greg:請參閱我的答案中的編輯。 – Slauma 2011-04-14 17:27:50

+0

感謝您的更新 - 我試着查詢OwnerOccupierDetails實體並將其過濾到我需要的實體。直到您保存實體時才能正常工作,因爲它需要它的父項並導致數據庫中存在引用錯誤。我要重試你的代碼以上... – Greg 2011-04-16 13:24:56