C# 如何为转换后的SQL查询找到等效的Linq命令

C# 如何为转换后的SQL查询找到等效的Linq命令,c#,sql-server,linq,entity-framework-core,C#,Sql Server,Linq,Entity Framework Core,我有一个以Guid作为主键的表和多个nvarcharmax列: 及 我对另一张桌子也有同样的问题 public class Document : IEntityKey<Guid> { public Document() { } public Guid Id { get; set; } [StringLength(500)] public string Name { get; set; } public byte[] Data { get;

我有一个以Guid作为主键的表和多个nvarcharmax列:

我对另一张桌子也有同样的问题

public class Document : IEntityKey<Guid>
{
    public Document() { }

    public Guid Id { get; set; }

    [StringLength(500)]
    public string Name { get; set; }

    public byte[] Data { get; set; }

    [StringLength(10)]
    public string Extension { get; set; }
}

正如您所看到的,数据列在转换后的查询中很奇怪。 这些查询很慢,我应该对它们进行调优,但我无法在C代码中找到它们的起源。因此,我正在寻找等效的翻译Linq命令。请你给我介绍一下:

什么是等效Linq? 为什么nvarcharmax转换为两列DATALENGTH[说明], [说明]? 为什么字节[]在DATALENGTH[Data]>=4116480,然后DATALENGTH 0x2142494E5F46494C45213A+将newid转换为VARCHAR 100作为VARBINARY 100,否则DATALENGTH[Data]结束,在DATALENGTH[Data]>=4116480,然后0x2142494E5F46494C45213A+将newid转换为VARCHAR 100作为VARBINARY 100,否则DATALENGTH[Data]结束?
在我们的环境中,我们还看到了一个类似的奇怪而缓慢的查询,该查询具有相同的奇怪常量0x2142494E5F46494C45213A。这是由数据层应用程序包DACPAC导出引起的。更好的是,取消作业不会终止查询,但终止SSM会停止查询。

在POCO的配置中,您是否告诉EF字段的类型为NVARCHAR?如果你不这样做,EF可能会尝试在幕后进行一些奇怪的转换。拆分的原因是EF需要长度信息。使用完整表定义架构和完整查询更新您的问题,而不使用。。。!以及相关的POCO
public partial class Table : INamedEntity, IEntityKey<Guid>
{
    public Guid Id { get; set; }

    private Table() { }

    public string Name { get; set; }

    public string Description { get; set; }
}
    SELECT   [Id], DATALENGTH([Description]), [Description] , DATALENGTH([Name]), [Name] 
    FROM     [dbo].[Table]
    WHERE    [Id] < @UpperBound
    ORDER BY [Id] ASC
public class Document : IEntityKey<Guid>
{
    public Document() { }

    public Guid Id { get; set; }

    [StringLength(500)]
    public string Name { get; set; }

    public byte[] Data { get; set; }

    [StringLength(10)]
    public string Extension { get; set; }
}
(@UpperBound uniqueidentifier)
SELECT   [Id],  CASE WHEN DATALENGTH([Data]) >= 4116480 THEN DATALENGTH(0x2142494E5F46494C45213A + CAST (CAST (newid() AS VARCHAR (100)) AS VARBINARY (100))) ELSE DATALENGTH([Data]) END, CASE WHEN DATALENGTH([Data]) >= 4116480 THEN 0x2142494E5F46494C45213A + CAST (CAST (newid() AS VARCHAR (100)) AS VARBINARY (100)) ELSE [Data] END, [Name],[Extension]  FROM [dbo].[Documents]  
    WHERE    [Id] < @UpperBound 
    ORDER BY [Id] ASC