日期:2014-05-20  浏览次数:20834 次

LINQ to Entities 的问题 LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为
用LINQ to Entities做组合查询的时候,用join做内连接。但是两个表关联的列的数据类型不一致。如:

 using (YyyseePortalEntities db = new YyyseePortalEntities())
{
  var temp= from A in db.Photo join B in db.Share on A.Content equals B.Id.ToString() select{......};

}

现在会报错:LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。
由于Id列是guid类型。必须变成字符串才可以比较。可是转换后就会出错。

请问什么原因。应如何修改??

------解决方案--------------------
var temp= from A in db.Photo join B in db.Share on A.Content equals B.Id select{......};

把.ToString() 去掉试试

------解决方案--------------------
http://topic.csdn.net/u/20100714/12/9100ae62-1d04-4646-97b1-ae8856d7ff59.html
------解决方案--------------------
在linq to entity语句里不能像LINQ TO SQL 那样使用非linq to entity方法,如Tostring(),Convert.toDatetime(),自定义的方法等等,最好的解决方案是在参数传进去前将参数处理好,如楼主再将B.Id.ToString() 传进去前先B.Id.ToString() 就可以了而不在linq to enttity语句中执行B.Id.ToString()
------解决方案--------------------
var temp= from A in db.Photo join B in db.Share on A.Content equals B.Id.ToString() select{......};
=============
C# code

//你这样试试,我刚刚用我本地的数据测试是可以toString()查询出数据的
 var temp= from A in db.Photo 
           from B in db.Share 
           where  System.Data.Linq.SqlClient.SqlMethods.Equals(A.Content,B.Id.ToString())
           select{......};

------解决方案--------------------
探讨
引用:
在linq to entity语句里不能像LINQ TO SQL 那样使用非linq to entity方法,如Tostring(),Convert.toDatetime(),自定义的方法等等,最好的解决方案是在参数传进去前将参数处理好,如楼主再将B.Id.ToString() 传进去前先B.Id.ToString() 就可以了而不在linq to en……

------解决方案--------------------
string s = B.Id.ToString();
var temp= from A in db.Photo join B in db.Share on A.Content equals s select{......};