相关疑难解决方法(0)

SQL to Entity Framework Count Group-By

我需要将此SQL语句翻译成Linq-Entity查询...

SELECT name, count(name) FROM people
GROUP by name
Run Code Online (Sandbox Code Playgroud)

sql linq-to-entities entity-framework group-by count

76
推荐指数
4
解决办法
10万
查看次数

GROUP BY但从其他列获取所有值

我会在示例中解释我需要做什么.首先,我们有一个像这样的简单表,名为table:

id | name
===+=====
1  | foo
1  | bar
1  | foobar
2  | foo
2  | bar
2  | foobar
Run Code Online (Sandbox Code Playgroud)

现在查询:

SELECT t.* FROM table t GROUP BY t.id
Run Code Online (Sandbox Code Playgroud)

会得到类似于这个的结果:

id | name
===+=====
1  | foo
2  | foo
Run Code Online (Sandbox Code Playgroud)

但是有可能收集所有名称的值来得到这样的结果吗?

id | name
===+=================
1  | foo, bar, foobar
2  | foo, bar, foobar
Run Code Online (Sandbox Code Playgroud)

sql group-by

34
推荐指数
3
解决办法
3万
查看次数

ASP Net Core Web API:不支持客户端 GroupBy

我是新来的,也是 asp.net 核心的新手。

我正在使用 asp.net core 3.0 编写一个 web api。我编写了以下 API 端点代码来检索Databases实体列表并按Value从另一个对象命名的字段对它们进行分组Type

//GET:api/Databases/graph
[HttpGet("graph")]
public async Task<ActionResult<IEnumerable<IGrouping<string, Database>>>> GetGraphDatabases()
{
    return await _context.Databases
        .Include(t => t.Type)
        .Where(d => d.Type.Code == "DATABASE_TYPE")
        .GroupBy(d => d.Type.Value)
        .ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试到达端点时,我收到以下错误消息:InvalidOperationException:不支持客户端 GroupBy。

我检查了这个答案,但没有太大帮助。

可以请你支持。

c# entity-framework-core ef-core-3.0 ef-core-3.1

5
推荐指数
1
解决办法
3083
查看次数

为什么 LINQ 在我的查询中使用了错误的数据类型,而在 EF 架构中正确声明了它?

我的数据库架构默认使用 varchar。使用 EF(6) 代码优先方法,我通过将字符串的 ColumnType 设置为 varchar 来确保我的模型是正确的:modelBuilder.Properties<string>().Configure(p => p.HasColumnType("varchar"));

我正在使用 PredicateBuilder 来构建我的 where 子句,并且一切都按预期工作;LINQ 使用 varchar 数据类型创建参数化查询。我也尝试过不使用 PredicateBuilder:出现完全相同的问题。

但是,一旦我添加了 Select 语句,LINQ 突然决定将数据类型更改为 nvarchar,我想不出任何原因。这当然对我的查询有严重的负面影响,因为 sql server 现在必须做一堆隐式转换,使我的索引无用。它现在正在扫描表格而不是寻找。

var ciPredicate = PredicateBuilder.New<InfoEntity>(true);
ciPredicate = ciPredicate.And(x => x.InfoCode == ciCode);
ciPredicate = ciPredicate.And(x => x.Source == source);

//varchar - N'@p__linq__0 varchar(8000),@p__linq__1 varchar(8000)'
var ciQuery2 = this.Scope.Set<InfoEntity>().Where(ciPredicate).ToList();

//varchar - N'@p__linq__0 varchar(8000),@p__linq__1 varchar(8000)'
var ciQuery3 = this.Scope.Set<InfoEntity>().Where(ciPredicate).GroupBy(x => new { x.Source, x.InfoKey }).ToList();

//varchar - N'@p__linq__0 varchar(8000),@p__linq__1 varchar(8000)'
var ciQuery4 = this.Scope.Set<InfoEntity>().Where(ciPredicate).GroupBy(x => …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server entity-framework-6

5
推荐指数
1
解决办法
212
查看次数