gpt4 book ai didi

c# - 为什么 Entity Framework 不能在 LINQ 语句中使用 ToString()?

转载 作者:可可西里 更新时间:2023-11-01 08:06:04 24 4
gpt4 key购买 nike

这在 LINQ-to-SQL 中有效:

var customersTest = from c in db.Customers
select new
{
Id = c.Id,
Addresses = from a in db.Addresses where c.Id.ToString() ==
a.ReferenzId select a
};

foreach (var item in customersTest)
{
Console.WriteLine(item.Id);
}

但是 Entity Framework 中的一个类似示例收到一条错误消息,基本上说它无法“将其转换为 SQL”,这是德语中的原始错误消息:

"'LINQ to Entities' erkennt die Methode 'System.String ToString()' nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden."

翻译:

"'LINQ to Entities' does not recognize Method 'System.String ToString()', this method can not be translated into a memory expression.

谁能阐明我们如何让这种语句在 Entity Framework 中工作或解释为什么会出现此错误?

最佳答案

简单地说:LINQ to Entities 不知道从您的 ID 类型到字符串的转换。

c.ID 的类型是什么?为什么它是一种 ID 类型,而 ReferenzId 是另一种类型?如果可能的话,让它们成为同一类型,这样你就不会再有问题了。我不知道是否有其他方法可以在 LINQ to Entities 中执行转换 - 可能有 - 但对齐类型会更清晰。

顺便说一句,这看起来真的像是一个连接:

var query = from c in db.Customers
join a in db.Addresses on c.Id equals a.ReferenzId into addresses
select new { Id = c.Id, Addresses = addresses };

编辑:为了回应您的评论 - ToString 出现在 IntelliSense 中,因为编译器不知道您的查询将意味着什么或将如何翻译。它是完全有效的 C#,并且可以生成有效的表达式树 - 只是 EF 不知道如何将该表达式树转换为 SQL。

您可以尝试使用Convert.ToString(c.Id) 而不是仅仅调用c.Id.ToString()...

关于c# - 为什么 Entity Framework 不能在 LINQ 语句中使用 ToString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com