使用join从linq插入到sql

时间:2013-04-25 20:20:51

标签: c# linq linq-to-sql

我有以下查询

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会出现异常,所以没有太多意义。

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

2 个答案:

答案 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()来比较字符串。