LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式

Posted

技术标签:

【中文标题】LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式【英文标题】:LINQ to Entities does not recognize the method 'System.String ToString()' method and this method cannot be translated into a store expression 【发布时间】:2012-04-21 16:47:14 【问题描述】:

当我尝试运行以下代码时。

var result = from c in db.brand
             where c.title.contains("test")
             select c.title + "-" +c.brand;

List<string> lst = r.ToList();

它给出以下错误。

LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且这个方法不能翻译成store 表达。

【问题讨论】:

这解释了为什么会发生这种情况 - ***.com/questions/1228318/linq-int-to-string 【参考方案1】:

我建议以匿名类型获取标题和品牌,然后在进程中执行字符串连接:

var list = db.Brand.Where(c => c.Title.Contains("test"))
                   .Select(c => new  c.Title, c.Brand )
                   .AsEnumerable() // Rest of the query in-process
                   .Select(x => x.Title + " " + x.Brand)
                   .ToList();

【讨论】:

【参考方案2】:

试试这个:

var result = from c in db.brand where c.title.contains("test") select c;
var finalResult = result.ToList().Select(ss=> ss.title + "-" + ss.brand);

【讨论】:

您需要再次致电ToList 以获取List&lt;string&gt;,这似乎是需要的。此外,当真正需要标题和品牌时,这将获取每个实体的所有属性。最后,不需要调用ToList 作为中间步骤——AsEnumerable 可以避免创建中间列表。 ToList 或 AsEnumerable 强制在字符串函数可用于收集之后对数据上下文执行查询。很好的乔恩,谢谢【参考方案3】:

尝试:

var result = from c in db.brand where c.title.contains("test") select new  c.title + "-" +c.brand 

【讨论】:

使用匿名类型在这里没有帮助 - 代码甚至无法编译,因为匿名类型中的属性没有名称。 是的,你是对的。确实在这里吸取了教训:总是测试答案!

以上是关于LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to Entities 无法识别方法 IsNullOrWhiteSpace

错误:LINQ to Entities 无法识别方法 DataLength

LINQ To Entities 无法识别方法 Last。真的吗?

LINQ To Entities 无法识别方法 Last。真的吗?

C# LINQ to Entities 无法识别方法“布尔”

我如何修复“LINQ to Entities无法识别方法”错误