0

我有以下查询

var listOfFollowers = (from a in db.UserLinks
        where a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 
        join b in db.UserNotifications on (int)a.OriginUserID equals b.TargetUserID
        select b);

然后我想在返回的每一行(或对象)上更新一次列

 foreach (var a in listOfFollowers)
    {
      a.UserNotifications += HappeningID.ToString() + "|";
    }
    db.SubmitChanges();

查询似乎有效,当我将生成的 SQL 放入 SSMS 时它工作正常,但是当我运行整个代码时,我尝试强制转换为 int 时遇到异常,这没有太大意义。

这可以吗,使用连接进行查询,但只返回一个表,更改一个属性,然后提交更改?

4

2 回答 2

2

你得到不能转换异常的原因是在 LINQ 语句中进行转换是无效的。我们不能做的其他事情是使用常规方法调用,例如 toString()

(int)a.OriginUserID不允许进入

   var listOfFollowers = (from a in db.UserLinks
    where a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 
    join b in db.UserNotifications on (int)a.OriginUserID equals b.TargetUserID
    select b);

之所以会出现此问题,是因为解析器试图将其转换为等效的 SQL,但没有找到任何等效的。其他此类情况是当您尝试调用 toString() 时。这里有几个很好的回应: linq-to-entities-does-not-recognize-the-method

对于您当前的情况,我相信您必须 1. 从第一个查询中获取结果 2. 转换值 3. 进行第二个 LINQ 查询

希望这可以帮助!

于 2013-04-25T20:54:42.370 回答
0

最有可能的是,这段代码出现了问题(int)a.OriginUserID
尝试删除强制转换或使用SqlFunctions.StringConvert()来比较字符串。

于 2013-04-25T20:54:53.043 回答