我有以下查询,即使用实体框架。
Analytic firstSent = (from a in Repository.Query<Analytic>()
where a.EntityType == "Proposal" &&
a.EntityId == Program.ActiveProposal.Id &&
a.Marker == AnalyticMarker.EmailProposalUrl.ToString()
orderby a.TimestampUtc
select a).FirstOrDefault();
在运行时,我收到以下错误:
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。
a.Marker
是一个字符串列,AnalyticMarker.EmailProposalUrl
是一个枚举值,我想将该列与该枚举的名称进行比较。
我知道SQL不支持从枚举到字符串的转换,但是为什么它不会解析此字符串的值然后将结果字符串传递给SQL?这应该可以正常工作。
答案 0 :(得分:5)
试试这个:
var emailProposalUrl = AnalyticMarker.EmailProposalUrl.ToString();
Analytic firstSent = (from a in Repository.Query<Analytic>()
where a.EntityType == "Proposal" &&
a.EntityId == Program.ActiveProposal.Id &&
a.Marker == emailProposalUrl
orderby a.TimestampUtc
select a).FirstOrDefault();
This other answer正在解释为什么这样做也可以发挥作用..
问题出现了,因为
ToString()
并没有真正执行,确实如此 转为MethodGroup,然后解析并转换为SQL。 由于没有ToString()
等价物,表达式失败。
答案 1 :(得分:0)
好吧,在C#通常会为你解析tostring的地方,它通常需要一个对象。例如,在这里,您要求它将字符串与枚举进行比较。虽然C#COULD调用tostring(),但它不正确。
考虑一下你是否想要与之比较,而不是枚举。您无法比较数字1和字符串。 (嗯,你可以,但它涉及假设,这是重点;语言只是试图刺激你使逻辑变得更加明确)