我想在我的表中插入一个名为'S‘的列,它将根据从表列获得的值获得一些字符串值。
例如:for each ID (a.z),我想获取存储在另一个表中的字符串值。字符串值是从另一个通过Linq查询获得它的方法返回的。
这是我需要得到的信息的结构:
a.z是表#1中第一个方框中的ID,从这个ID中我在表#2中得到另一个id,从这个id中我可以得到我需要在列'S‘下显示的字符串值。

var q = (from a in v.A join b in v.B
on a.i equals b.j
where a.k == "aaa" && a.h == 0
select new {T = a.i, S = someMethod(a.z).ToString()})
return q;导致以下错误的行S = someMethod(a.z).ToString():
无法将“'System.Data.Linq.SqlClient.SqlMethodCall'.”类型的对象转换为‘System.Data.Linq.SqlClient.SqlMethodCall’.类型的
发布于 2012-04-02 02:15:15
你会想把它分成两个陈述。返回查询的结果(这将击中数据库),然后在单独的步骤中第二次枚举结果,将转换转换为新的对象列表。第二个“查询”不会击中数据库,因此您将能够在其中使用someMethod()。
Linq到实体是一件有点奇怪的事情,因为它使从C#查询数据库的转换非常无缝:但是您必须始终提醒自己,“这个C#将被转换成一些SQL。”因此,您必须扪心自问,“所有这些C#实际上能作为SQL执行吗?”如果它不能--如果你在里面调用someMethod() --你的查询就会有问题。通常的解决办法是把它分开。
(使用.AsEnumerable()的@BrokenGlass的另一个回答基本上是另一种方法。)
https://stackoverflow.com/questions/9970100
复制相似问题