我有Person实体,它与Person_Addresses有1:n的关系(字段:PersonID、AddressID、ValidFrom)。我想得到所有的Person记录和相关的Person_Addresses,只有最新的ValidFrom。我应该如何使用ObjectQuery或IQueryable来完成这个任务?
编辑:,我提到了ObjectQuery和IQueryable,因为我希望有一个使用扩展方法的解决方案(我认为,它是如何被调用的)。此外,我忘了提到我使用的是生成实体的实体框架。我想得到一个person对象,它有它的person_adress成员。
以下是实体结构: Person成员: int id、字符串名、字符串姓氏、Partner_Address partneradress
Person_Address成员:int personid,int adressid,date validfrom
发布于 2010-06-22 13:23:49
试试看以下几点。
我有以下实体。
//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; }
}然后触发以下查询。
//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
};我发现它在一些测试数据中运行良好。
如果有任何问题,请告诉我。
https://stackoverflow.com/questions/3090766
复制相似问题