我有以下查询
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会出现异常,所以没有太多意义。
可以,使用连接进行查询,但只返回一个表,更改一个属性,然后提交更改?
答案 0 :(得分: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.从第一个查询中获取结果 抛出价值 3.进行第二次LINQ查询
希望这有帮助!
答案 1 :(得分:0)
最有可能的是,这段代码(int)a.OriginUserID
出现了问题
尝试删除广告投放或使用SqlFunctions.StringConvert()来比较字符串。