У меня есть таблица с Guid
в качестве первичного ключа и несколькими nvarchar(max)
столбцами:
CREATE TABLE [dbo].[Tables](
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Description] [nvarchar](max) NULL,
CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED
([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
и
public partial class Table : INamedEntity, IEntityKey<Guid>
{
public Guid Id { get; set; }
private Table() { }
public string Name { get; set; }
public string Description { get; set; }
}
, который переведен на этот запрос в SQL Server
:
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
Как видите, столбец Data
странный в переведенный запрос. Эти запросы медленные, и мне нужно их настроить, но я не могу найти их происхождение в коде C#
. Поэтому я ищу эквивалентную переведенную команду Linq
. Не могли бы вы рассказать мне о:
- Что эквивалентно
Linq
? - Почему
nvarchar(max)
переведено в две колонки DATALENGTH([Description]),
[Description]
? - Почему
byte[]
переведено на 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
?