WPF query dont seem appropriate

时间:2015-07-31 20:52:22

标签: c# sql-server wpf linq

i have this application in which report is not working, i am actually a php developer and i can understand the select * from table like query but linq query is new to me..

But even in linq query there is a join concept but i am not seeing any joins in this query so i am wondering is ther anything wrong with this query or is this normal in WPF to use query like that.

                var query = from t in dc.TransectionsRemittenances
                            from c in t.CustomerAccounts
                            from b in t.Beneficiaries
                            from bank in b.BeneBankAccounts
                            where t.AgentId == int.Parse(agentId)
                            where t.GbBranchId == GlobalClass.GbBranchID
                            where t.Date == givenDate
                            select new { t, c, b, bank };

The Actual Code is like This.

private void btnLoad_Click(object sender, RoutedEventArgs e)
        {
            string agentName = string.Empty;
            try
            {
                DateTime givenDate = DateTime.ParseExact(tbDate.Text, "M/d/yyyy", CultureInfo.InvariantCulture);

                if (cmbAgents.SelectedIndex >= 0)
                {
                    agentId = ((DataRowView)cmbAgents.SelectedItem).Row.ItemArray[0].ToString();
                    agentName = ((DataRowView)cmbAgents.SelectedItem).Row.ItemArray[1].ToString();
                    //MessageBox.Show(agentId);
                    //------------------------LOAD REPORT--------------------------//

                    Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource();
                    RMSDatabase2DataSet dataset = new RMSDatabase2DataSet();

                    dataset.BeginInit();

                    DataClassesDataContext dc = new DataClassesDataContext();
                    DataSet1.AgentFaxDSDataTable dt = new DataSet1.AgentFaxDSDataTable();

                    if (GlobalClass.GbBranchID != 12)
                    {
                        var query = from t in dc.TransectionsRemittenances
                                    from c in t.CustomerAccounts
                                    from b in t.Beneficiaries
                                    where t.AgentId == int.Parse(agentId)
                                    where t.GbBranchId == GlobalClass.GbBranchID
                                    where t.Date == givenDate
                                    select new { t, c, b};

                        foreach (var d in query)
                        {
                                dt.Rows.Add(d.t.ReceiverCurrency, d.t.ReceivedAmount, d.t.Date,
                                d.c.Name, d.b.Name, d.b.FName, d.b.City, d.b.Address);//, "", "", "", "");
                        }

                    }
                    else
                    {
                        var query = from t in dc.TransectionsRemittenances
                                    from c in t.CustomerAccounts
                                    from b in t.Beneficiaries
                                    from bank in b.BeneBankAccounts
                                    where t.AgentId == int.Parse(agentId)
                                    where t.GbBranchId == GlobalClass.GbBranchID
                                    where t.Date == givenDate
                                    select new { t, c, b, bank };

                        foreach (var d in query)
                        {
                            if (d.t.BeneSource == null)
                            {
                                dt.Rows.Add(d.t.ReceiverCurrency, d.t.ReceivedAmount, d.t.Date,
                                d.c.Name, d.b.Name, d.b.FName, d.b.City, d.b.Address, "", "", "", "");
                            }
                            else
                            {
                                dt.Rows.Add(d.t.ReceiverCurrency, d.t.ReceivedAmount, d.t.Date,
                                d.c.Name, d.b.Name, d.b.FName, d.b.City, d.b.Address, " (Bank: " + d.bank.BankName + ",",
                                " AccNo-" + d.bank.BankAccountNo + "-", " BCode-" + d.bank.BranchCode, ", " + d.bank.Address + ")");
                            }
                        }
                        //query.ToArray().
                    }

                    reportDataSource1.Name = "DataSet1"; //Name of the report dataset in our .RDLC file
                    reportDataSource1.Value = dt;


                    this._reportViewer.LocalReport.DataSources.Clear();
                    this._reportViewer.LocalReport.DataSources.Add(reportDataSource1);
                    this._reportViewer.LocalReport.ReportEmbeddedResource = "RMS.rptRemittances.rdlc";

                    ReportParameter[] param = new ReportParameter[2];
                    param[0] = new ReportParameter("para_agent", agentName.ToString());
                    param[1] = new ReportParameter("para_forDate", givenDate.ToString("d/M/yyyy"));

                    this._reportViewer.LocalReport.SetParameters(param);

                    _reportViewer.RefreshReport();
                }
            }
            catch (Exception ex)
            {
                string messageBoxText = "Enter Date Formate is incorrect, it must be 'MM/DD/YYYY'.\n\n" + ex.Message;
                string caption = "Error";
                MessageBoxButton button = MessageBoxButton.OK;
                MessageBoxImage icon = MessageBoxImage.Error;
                MessageBox.Show(messageBoxText, caption, button, icon);

            }
        }

can anyone tell if query is ok and if its ok. then how its working i mean joins, inner join or left join etc. Plus what is the name of this query if its not linq query what should i look for on internet..

As i am getting no problem from this query in application developed by previous developer of my company. But i am also not getting any data thats why i am trying to check this query is ok and want to run it in MSSQL to see if there is any result generating from it.. BUt nt sure wht to do with the joins??

1 个答案:

答案 0 :(得分:0)

就像在SQL Server中一样,省略Linq中的join子句会有效地创建Cross Join,从而产生Cartesian product

对于交叉加入的需求相对罕见,但如果不知道报告所显示的所有细节,则无法确定它是对还是错。

同样在SQL中,WHERE子句可以有效地将交叉连接转换为内部连接,这可能是预期的。