【问题标题】:Linq Query Return Duplicate Record From Sql DatabaseLinq 查询从 Sql 数据库返回重复记录
【发布时间】:2017-12-19 01:16:16
【问题描述】:

我正在尝试将三个 linq 查询加入到单个查询中,并将记录显示到一个有角度的 js 应用程序中。但问题是当我输入帐号并单击提交按钮时,它也显示重复记录。

这是 Linq 查询:

public string TranscationDetails(string Account_Number)
{
    var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
    using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
    {
        var CombinedQuery = (from x in context.Current_Account_Deposit
                             join y in context.Current_Account_Withdraw on x.Account_Number equals y.Account_Number
                             join z in context.Current_Account_Details on y.Account_Number equals z.Account_Number
                             where x.Account_Number == accountNumber
                             select new
                             {
                                 x.Account_Number,
                                 x.Amount,
                                 Amount1 = y.Amount,
                                 z.Account_Balance,
                             }).ToList();

        var js = new System.Web.Script.Serialization.JavaScriptSerializer();
        return js.Serialize(CombinedQuery); // return JSON string
    }
}

有些人在这个链接上建议我.. http://www.advancesharp.com/blog/1108/linq-inner-join-left-outer-join-on-two-lists-in-c-with-example 这是数据库记录截图:

这是我单击带有帐号的按钮时的屏幕截图,Linq 查询也显示重复记录。

【问题讨论】:

  • 因为您的Current_Account_Withdraw 有两条记录 15,三条记录 16。这就是连接的工作原理,它们是笛卡尔积。
  • 我知道。我怎样才能避免它?
  • 你想显示什么?如果您想要一天的总提款,您将 SUM() 列。您的屏幕截图看起来好像您的交易日期是某种类型的文本格式,而不是日期。您需要用您想要的结果更新问题,所显示的内容非常有意义。我希望在帐户和交易之间看到一对多的关系。
  • 我想显示交易记录,避免现在显示的重复记录。你也是对的

标签: c# mysql angularjs sql-server linq


【解决方案1】:

也许你可以使用这个类的概念

ReturnClass 
{ 
     Current_Account_Details detail {get;set;} 
     List<Current_Account_Withdraw> listofwithdraw {get;set;}
     List<Current_Account_Deposit> listofdeposit {get;set;} }
}

示例:(代码可能无法正常工作:D) 我将使用 lambda

    context.Current_Account_Details.Select(x => new
   {
       x.Account_Number,
       detail = x,
       listofwithdraw = x.Current_Account_Withdraw.ToList(),
       listofdeposit = x.Current_Account_Deposit.ToList()
   }).ToList();

【讨论】:

  • 一些用户建议我使用左外连接来避免重复记录。
  • 或许你应该分享一下,用excel,比如15号账号及其预期结果(带金额)
  • MyDBDataContext sqlObj = new MyDBDataContext(); var employees = from emps in sqlObj.tblEmployees join de in sqlObj.tblDepartments on emps.DepartmentID 等于 de.DepartmentID into dep from dept in dep.DefaultIfEmpty() select new { emps.EmployeeID, emps.EmployeeName, emps.Salary, dept.部门名称 };
  • 检查这个答案?
  • 查看此链接:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…。并查看部分:Group Join。如您所见,有“产品”,表示产品列表。 1类,多产品。作为你的 1 个 account_detail,多笔交易
猜你喜欢
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多