我正在try 使用C#中的实体框架核心和Linq来使查询的以下部分工作

STRING_AGG(cast(EntityName as varchar(max)), ' , ') AS AllEntityNames

我需要把这EntityName个都合并起来.但是,我得到一个错误:

STRING_AGG聚合结果超出了8000字节的限制.使用LOB类型以避免结果截断.

当我使用

.Select(g => new
             {
                 AllEntityNames = string.Join(",", g.Select(p => p.EntityName )) 
             })

如何在C#代码中将SQL查询的一部分转换为varchar

推荐答案

一百零五

To allow longer results, the input string must be converted to a 100 type (referred to as "LOB types" in the error message). The question is: How do we do that from LINQ to SQL and EF Core.

根据第Function Mappings of the Microsoft SQL Server Provider篇文章,函数调用Convert.ToString(value)将映射到CONVERT(nvarchar(max), @value).

这可能是为了从字符串以外的类型进行转换,但也适用于字符串类型.

然后,您的代码将类似于:

.Select(g => new {
    // The Convert.ToString() below will cast EntityName to NVARCHAR(MAX).
    // This will avoid the 8000 char limit for STRING_AGG() on VARCHAR(N).
    // This comment is here for a reason. Leave it and the ToString() call.
    AllEntityNames = string.Join(
        ",",
        g.Select(p => Convert.ToString(p.EntityName))
    ) 
})

Csharp相关问答推荐

如何将字节数组转换为字符串并返回?

Blazor:类型或命名空间名称Components在命名空间中不存在''

有没有一种方法可以在包含混合文本的标签中嵌入超链接?

实现List T,为什么LINQ之后它不会返回MyList?<>(无法强制转换WhereListIterator `1类型的对象)'

在路由中使用枚举

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

单行上的ReSharper数据标注

如何将字符串变量传递给JObject C#-无法加载文件或程序集';System.Text.Json

Polly重试URL复制值

如何更改新创建的实例的变量?

实体框架-IsRequired()与OnDelete()

.NET Google Workspace API获取错误CS0266

如何对特定异常使用Polly重试机制?

工厂类是如何在.NET 8中注册的?

C#System.Commandline:如何向命令添加参数以便向其传递值?

为什么我的属性即使没有显式地设置任何[必需]属性,也会显示验证?

C#定时器回调对象上下文?

.NET文档对继承的困惑

如何将行添加到DataGrid以立即显示它?

实体框架允许您具有筛选的属性吗?