Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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# 如何在EF中查询多个表中的数据?_C#_Entity Framework_.net Core_Entity Sql - Fatal编程技术网

C# 如何在EF中查询多个表中的数据?

C# 如何在EF中查询多个表中的数据?,c#,entity-framework,.net-core,entity-sql,C#,Entity Framework,.net Core,Entity Sql,这是我的查询,用于从SQLServer的多个表中获取数据 SELECT Blob.transactionId, Blob.status, COUNT(Bsp._id) AS processed, Blob.total, Blob.reason, (SELECT MAX(MyMaxName) FROM (VALUES (MAX(Fail.ProcessTime)), (MA

这是我的查询,用于从SQLServer的多个表中获取数据

SELECT
    Blob.transactionId,
    Blob.status,
    COUNT(Bsp._id) AS processed,
    Blob.total, 
    Blob.reason,
    (SELECT MAX(MyMaxName) 
     FROM (VALUES 
               (MAX(Fail.ProcessTime)), 
               (MAX(Bsp.ProcessTime)) 
          ) MyAlias(MyMaxName)) AS ProcessTime ,
    COUNT(DISTINCT Fail.id) AS failed
FROM 
    BlobStatus AS Blob
LEFT JOIN 
    BspResponse AS Bsp ON Bsp.tid = Blob.transactionId
LEFT JOIN 
    FailedResponse AS Fail ON Fail.transactionId = Blob.transactionId
WHERE 
    Blob.transactionId = "084f4b75-c38e-449c-a9eb-148dce67111a"
GROUP BY 
    Blob.transactionId, Blob.status, Blob.total, Blob.reason, Blob.failed
在.NET代码中,我通过调用下面提到的方法尝试了这种方法。通过参考本教程 . 实体SQL

public BlobResponse GetBlobDetailsById(string tid)
{
        try
        {
            string sqlQuery = $"SELECT  " +
                "  Blob.transactionId, Blob.status,   " +
                "COUNT(Bsp._id) AS processed,  Blob.total,   " +
                " Blob.reason, " +
                "(SELECT" +
                  " MAX(MyMaxName) " +
                  "FROM(VALUES " +
                  $"(MAX(Fail.ProcessTime))," +
                  $" (MAX(Bsp.ProcessTime)) ) " +
                  "MyAlias(MyMaxName)" +
                ") as ProcessTime, " +
                "COUNT(DISTINCT Fail.id) AS failed  " +
                "FROM BlobStatus AS Blob                 " +
                "LEFT JOIN BspResponse AS Bsp ON Bsp.tid = Blob.transactionId   " +
                "LEFT JOIN FailedResponse AS Fail ON Fail.transactionId = Blob.transactionId " +
                $"WHERE Blob.transactionId = {tid} " +
                " GROUP BY Blob.transactionId, Blob.status, Blob.total, Blob.reason, Blob.failed";

            var objctx = ((IObjectContextAdapter)_mriDbContext).ObjectContext;
   
            ObjectQuery<BlobResponse> res = objctx.CreateQuery<BlobResponse>(sqlQuery);
            BlobResponse blobResponse = res.First<BlobResponse>();

            return blobResponse;
        }
        catch (Exception e)
        {
            _logger.LogInformation(e.Message);
            return null;
        }
    }
我得到以下错误

[17:27:43 INF]无法将“Flash.MultiRecordInquiry.Subscriber.Models.Context.MriDbContext”类型的对象强制转换为“System.Data.Entity.Infrastructure.IObjectContextAdapter”类型

这是数据库上下文

public class MriDbContext : DbContext
{
    public MriDbContext(DbContextOptions<MriDbContext> options) : base(options)
    { }

    public DbSet<BSPReponse> BspResponse { get; set; }
    public DbSet<BspStatusDetails> BspStatusDetails { get; set; }
    public DbSet<FhaStatusDetails> FhaStatus { get; set; }

    public DbSet<BlobStatus> BlobStatus { get; set; }

    public DbSet<FailedResponse> FailedResponses { get; set; }
}
我是EF新手,不熟悉在实体框架中运行如此复杂的查询。 请帮我解决这个问题


提前感谢

我希望它能对其他人完全有帮助,就像在看到许多其他人的建议和回复之后一样。我刚刚发现,有一种经过修改的方法,可以像在SQL server中一样执行原始查询

例如,您可以在EF中这样使用来执行原始查询

using (var command = _ctx.Database.GetDbConnection().CreateCommand())
       {
           command.CommandText = "select * from MARK where tid ='123'";
           _ctx.Database.OpenConnection();
           using (var reader = command.ExecuteReader())
                {

                    reader.Read();
                    var firstColumnObject = reader.GetValue(0); 
                }
             _ctx.Database.CloseConnection();
       
        }


我希望它能对其他人完全有帮助,就像在看到许多其他人的建议和回复之后一样。我刚刚发现,有一种经过修改的方法,可以像在SQL server中一样执行原始查询

例如,您可以在EF中这样使用来执行原始查询

using (var command = _ctx.Database.GetDbConnection().CreateCommand())
       {
           command.CommandText = "select * from MARK where tid ='123'";
           _ctx.Database.OpenConnection();
           using (var reader = command.ExecuteReader())
                {

                    reader.Read();
                    var firstColumnObject = reader.GetValue(0); 
                }
             _ctx.Database.CloseConnection();
       
        }


我建议只搜索LINQ google EF LINQ,你会看到很多示例。@AliK该查询复杂且嵌套选定,我不确定如何在LINQ中编写。你可以这样运行查询。我建议只搜索LINQ google EF LINQ,你会看到很多示例。@AliK该查询复杂且嵌套选定,而我不是确定如何在linq中编写。您可以像这样运行查询