首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ到Entites和ObjectQuery

LINQ到Entites和ObjectQuery
EN

Stack Overflow用户
提问于 2010-06-22 06:28:37
回答 1查看 682关注 0票数 0

我有Person实体,它与Person_Addresses有1:n的关系(字段:PersonIDAddressIDValidFrom)。我想得到所有的Person记录和相关的Person_Addresses,只有最新的ValidFrom。我应该如何使用ObjectQuery或IQueryable来完成这个任务?

编辑:,我提到了ObjectQueryIQueryable,因为我希望有一个使用扩展方法的解决方案(我认为,它是如何被调用的)。此外,我忘了提到我使用的是生成实体的实体框架。我想得到一个person对象,它有它的person_adress成员。

以下是实体结构: Person成员: int id、字符串名、字符串姓氏、Partner_Address partneradress

Person_Address成员:int personidint adressiddate validfrom

EN

回答 1

Stack Overflow用户

发布于 2010-06-22 13:23:49

试试看以下几点。

我有以下实体。

代码语言:javascript
复制
    //Person Entity
    public class Person
    {
        public int PersonID  { get; set; }
        public string PersonName { get; set; }
    }

    //PersonAddress Entity
    public class PersonAddress
    {
        public int PersonID { get; set; }
        public int AddressID { get; set; }
        public DateTime ValidFrom { get; set; }
    }

然后触发以下查询。

代码语言:javascript
复制
    //Get the latest ValidFrom for each person from PersonAddress.
    var getLatestDateRecords =
    from p in lstPersonAddress
    group p by p.PersonID into g
    select new
    {
        Infos =
            (from PA in g
            select new
            {
                PersonId = PA.PersonID
                Date = g.Max(t=>t.ValidFrom)
            }).Distinct()
    };

    //Segregate the ValidFroms and PersonId from the
    //previous record set(getLatestDateRecords).
    var segRecords =
        from x in getLatestDateRecords
        from y in x.Infos
        select new { Date = y.Date, PersonId = y.PersonId };

    //Obtain all the relevant information from the PersonAddress
    // for the latest ValidFrom dates.
    var allValidRecords =
        from PA in lstPersonAddress
        join x in segRecords
        on PA.ValidFrom equals x.Date
        where PA.PersonID == x.PersonId
        select new {
                PersonId = PA.PersonID
                , AddressId = PA.AddressID
                , Date = PA.ValidFrom
            };

    //Get the final result
    var resultSet =
        from p in lstPerson
        join x in allValidRecords
        on p.PersonID equals x.PersonId
        select new
        {
            PersonId = p.PersonID
            ,PersonName = p.PersonName
            ,AddressId = x.AddressId,
            Date = x.Date
        };

我发现它在一些测试数据中运行良好。

如果有任何问题,请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3090766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档