在我给定的情况下需要LINQ到EF查询

时间:2013-11-18 09:23:48

标签: linq entity-framework asp.net-mvc-4

我必须存储农民的资料。为此,我将MST_FarmerProfile作为主表,其中包含personDetails_Id,bankDetails_Id,contactDetails_Id作为外键,用于在不同表格中存储个人详细信息,银行详细信息和联系人详细信息。

现在主要的是每当我更新记录时,修改的细节都保存在同一个表中,而先前的记录保存在personal details history, bank details history and contact Details history表中,这些表再次包含personDetails_Id,bankDetails_Id,contactDetails_Id作为外键。基本上我们需要跟踪更新的记录。以下是我的数据库架构:

Database schema

我尝试过使用连接,但问题是假设我更新两次相同的记录,每个历史表将包含2行具有相同的外键,因此我的连接提供2X2X2 = 8条记录,而我只需要2条。

1 个答案:

答案 0 :(得分:0)

我做到了这一点并且有效:

List<FarmerDetailsReport> fdr = 

(from fp in RptdataAccess.MST_FarmerProfile 
join pdh in RptdataAccess.PersonalDetailsHistory on fp.personDetails.Id equals pdh.PersonalDetails.Id
join cdh in RptdataAccess.ContactDetailsHistory on fp.contactDetails.Id equals cdh.ContactDetails.Id
join bdh in RptdataAccess.BankDetailsHistory on fp.bankDetails.Id equals bdh.BankDetails.Id 

        select new FarmerDetailsReport 
        {
        FarmerURNNo = fp.URN_No,
        CreatedBy = fp.UserId, 
        CreatedOn = fp.CreatedOn,
        FarmerName = pdh.FarmersName, 
        FatherOrHusbandName = pdh.FatherHusbandName,
        DateofBirth = pdh.DateOfBirth,
        Gender = pdh.IsMale.ToLower() == "yes" ? "Male" : "Female",
        MaritalStatus = pdh.MaritalStatus, 
        Religion = pdh.Religion.ToLower() == "other" ? pdh.otherReligion :  pdh.Religion,     
        TypeofBank = bdh.bankType,
        BankName = bdh.bankName, 
        BranchName = bdh.branchName, 
        BankAccountNo = bdh.bankAccountNo,
        Address1 = cdh.Address1,
        State = cdh.State, 
        District = cdh.District, 
        UpdatedOn = pdh.ChangedOn, 
        UpdatedBy = pdh.ChangedBy
        } ).GroupBy(p => new { p.UpdatedOn }).Select(g => g.FirstOrDefault()).ToList();