efcore 3.1 不支持字符串连接查询?

Mai*_*all 4 c# ef-core-3.1

有没有办法通过将多个字段与 String.Format 或 $"{}" 或传统的 "" + "" + "" 连接在一起来使用 EFCore 3.1 进行查询?

我有这个代码:

await this.Db.ACoolDbSet.Where(y => y.Plums + " " + y.Pears == "LOL").ToListAsync();
Run Code Online (Sandbox Code Playgroud)

Plums并且Pears是整数。

它导致此错误:

System.InvalidOperationException: 'Null TypeMapping in Sql Tree'
Run Code Online (Sandbox Code Playgroud)

这是预期的吗?

This exception was originally thrown at this call stack:
Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.SqlTypeMappingVerifyingExpressionVisitor.VisitExtension(System.Linq.Expressions.Expression)
System.Linq.Expressions.Expression.Accept(System.Linq.Expressions.ExpressionVisitor)
System.Linq.Expressions.ExpressionVisitor.Visit(System.Linq.Expressions.Expression)
Microsoft.EntityFrameworkCore.Query.SqlExpressions.SqlBinaryExpression.VisitChildren(System.Linq.Expressions.ExpressionVisitor)
System.Linq.Expressions.ExpressionVisitor.VisitExtension(System.Linq.Expressions.Expression)
Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.SqlTypeMappingVerifyingExpressionVisitor.VisitExtension(System.Linq.Expressions.Expression)
System.Linq.Expressions.Expression.Accept(System.Linq.Expressions.ExpressionVisitor)
System.Linq.Expressions.ExpressionVisitor.Visit(System.Linq.Expressions.Expression)
Microsoft.EntityFrameworkCore.Query.RelationalSqlTranslatingExpressionVisitor.Translate(System.Linq.Expressions.Expression)
Microsoft.EntityFrameworkCore.Query.RelationalQueryableMethodTranslatingExpressionVisitor.TranslateExpression(System.Linq.Expressions.Expression)
...
[Call Stack Truncated]
Run Code Online (Sandbox Code Playgroud)

添加 y.Plums.ToString() 和 y.Pears.ToString() 解决了这个问题。不幸的是,String.Format 和 $"{}" 仍然无法正常工作

cam*_*ahe 6

尝试这个

await this.Db.ACoolDbSet.Where(y => y.Plums.ToString() + " " + y.Pears.ToString() == "LOL").ToListAsync();
Run Code Online (Sandbox Code Playgroud)

  • @PanagiotisKanavos 这确实有效。回答者可以添加一些解释,而不是“试试这个”。 (4认同)
  • 我认为这是 EF Core 3 的错误。原始表达式映射到“String.Concat(object, object)”。后者映射到“String.Concat(string, string)”。显然他们的新翻译器支持后者,但无法支持前者。 (4认同)

Ram*_*Ram 5

字符串插值现在可以在 EF Core 3.1 中使用

await this.Db.ACoolDbSet.Where(y => $"{y.Plums} {y.Pear}" == "LOL").ToListAsync();
Run Code Online (Sandbox Code Playgroud)