Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用linq方法语法连接两个表,MVC EntityFramework_C#_Sql_Asp.net Mvc_Entity Framework_Linq - Fatal编程技术网

C# 用linq方法语法连接两个表,MVC EntityFramework

C# 用linq方法语法连接两个表,MVC EntityFramework,c#,sql,asp.net-mvc,entity-framework,linq,C#,Sql,Asp.net Mvc,Entity Framework,Linq,我正在使用两个表:CI_CLIENTRISK(SCD类型2)。。。和QB_发票_标题() 它们可以通过ClientID连接。我想从本质上复制此查询: SELECT a.ClientID, MAX(b.InvoiceDt) AS MaxInvoiceDt (omitted for brevity) FROM CI_CLIENTRISKADJS a INNER JOIN QB_INVOICES_HEADER b ON a.ClientID = b.ClientID WHERE a.I

我正在使用两个表:CI_CLIENTRISK(SCD类型2)。。。和QB_发票_标题()

它们可以通过ClientID连接。我想从本质上复制此查询:

SELECT a.ClientID,
    MAX(b.InvoiceDt) AS MaxInvoiceDt
    (omitted for brevity)
FROM CI_CLIENTRISKADJS a
INNER JOIN QB_INVOICES_HEADER b
ON a.ClientID = b.ClientID
WHERE a.IsActive = 1
GROUP BY a.ClientID
ORDER BY MaxInvoiceDt DESC
这是我到目前为止所拥有的。它不会返回任何记录

using (var db = new PLOGITENS01Entities())
        {
        var rvClientRiskAdjs = db.CI_CLIENTRISKADJS
            .Take(50)
            .Join(db.QB_INVOICES_HEADER,
                a => a.ClientID,
                b => b.ClientID,
                (a, b) => new { Risk = a, Invoices = b })
            .Where(a => a.Risk.IsActive == 1)
            .OrderByDescending(o => o.Invoices.InvoiceDt)
            .Select(c => new ClientRiskModel()
            {
                ClientRiskId = c.Risk.ClientRiskID,
                ClientName = c.Risk.CI_CLIENTLIST.ClientName,
                ClientId = c.Risk.ClientID,
                ClientRiskAdjs = c.Risk.ClientRiskAdjs,
                RecordValidStartDt = c.Risk.RecordValidStartDt,
                RecordValidEnddt = c.Risk.RecordValidEnddt,
                IsActive = c.Risk.IsActive
            })
            .ToList();

        return View(new GridModel(rvClientRiskAdjs));
        }

试着把你的
.Take(50)
方法放在你最后的
之后。选择
之前。ToList()
。实际上,您只需要获取第一个表的前50条记录,然后从那里加入。我假设在第一个表的前50条记录中没有与第二个表的连接;因此,您的结果将有0条记录。

我在阅读本文时偶然发现了这个解决方案:

谢谢你的提示。:)这是可行的,但它没有考虑最大聚合(在SQL查询的第二行中找到)。它返回所有客户端ID的列表,不返回任何组。我最终通过这篇文章找到了答案:
var rvClientRiskAdjs = (from ri in db.CI_CLIENTRISKADJS
                        join qb in
                            (from qb in db.QB_INVOICES_HEADER
                             orderby qb.InvoiceDt ascending
                             group qb by qb.ClientID into grp
                             select new
                             {
                                 InvoiceDt = grp.Max(s => s.InvoiceDt),
                                 ClientID = grp.Key
                             })
                        on ri.ClientID equals qb.ClientID
                        orderby qb.InvoiceDt descending
                        where ri.IsActive == 1
                        select new ClientRiskModel()
                        {
                            ClientRiskId = ri.ClientRiskID,
                            ClientName = ri.CI_CLIENTLIST.ClientName,
                            ClientId = ri.ClientID,
                            ClientRiskAdjs = ri.ClientRiskAdjs,
                            RecordValidEnddt = ri.RecordValidEnddt,
                            RecordValidStartDt = ri.RecordValidStartDt
                        })
                        .ToList();