如何过滤相关的儿童记录 [英] How do I filter related Child Record

查看:96
本文介绍了如何过滤相关的儿童记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用RIA服务。我需要选择一个有多个相关子实体( UnitOccupierDetails )的父实体( UnitOccupier )。我需要过滤子实体以返回单个记录。如何做到这一点?

  var q =从uo在_unitOccupierContext.GetUnitOccupierQuery()
其中uo.UnitOccupierDetails。 ????
--->我不能得到这里的子属性

谢谢

解决方案

您不能包含所选父项的过滤子集。您只能包含完整的集合或根本没有子集合。但是,作为一种解决方法,您可以使用中间匿名类型,如下所示:

  var q =(来自uo in _unitOccupierContext.GetUnitOccupierQuery )
选择新的{
Parent = uo,
Childs = uo.UnitOccupierDetails
.Where(uod => uod.MyDetailsProp == MyDetailsValue)
})。 FirstOrDefault();

if(q!= null)
{
UnitOccupier selectedUnitOccupier = q.Parent;
selectedUnitOccupier.UnitOccupierDetails = q.Childs.ToList();
// selectedUnitOccupier现在只包含被过滤的孩子
}

编辑



如果你想查询孩子并包含他们的父母(与评论中的问题相关),你可以使用:

  var q = _unitOccupierContext.GetUnitOccupierQuery()
.SelectMany(uo => uo.UnitOccupierDetails
.Where(uod => uod.MyDetailsProp == MyDetailsValue))
.Include(uod => uod.UnitOccupier)
.FirstOrDefault(); //或.ToList(),如果您期望多个记录
// q现在为空或单个UnitOccupierDetails实体
//引用其父

我假设你的 UnitOccupierDetails 类有一个导航属性到父 UnitOccupier


I am using RIA services. I need to select a parent entity (UnitOccupier) which has a number of related child entities(UnitOccupierDetails). I need to filter the child entities to return a single record. How do I do this?

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

Thanks

解决方案

You cannot include a filtered child collection of the selected parent. You can only include either the full collection or no child collection at all. But as a workaround you could use an intermediate anonymous type, like so:

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
}

Edit

If you want to query for the childs and include their parents (related to question in comment) you could use:

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

I am assuming here that your UnitOccupierDetails class has a navigation property to the parent UnitOccupier.

这篇关于如何过滤相关的儿童记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆