2013-04-25 97 views
0

我有以下查询插入到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的异常,请不要太多理解。

这是好的,做一个查询使用联接,但只返回一个表,更改一个属性,然后submitchanges?

+0

@ShafqatMasood - 罗没有运气 – 2013-04-25 20:44:09

+0

试试这个变种listOfFollowers =(从在db.UserLinks 其中a.TargetUserID == TargetUserID && a.LinkStatusTypeID == 2 JOIN B在db.UserNotifications上a.OriginUserID等于SqlFunctions.StringConvert((double)b.TargetUserID) select b); – 2013-04-25 20:54:12

回答

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查询

希望这帮助!

+0

我没有使用ToString(),似乎这将是无效的比较两个数字,但它是投掷到一个int抛出异常,我改变了数据库,使两个列bigint,而不是一个int和一个bigint – 2013-04-25 21:48:56

+0

对于不适当的演员,你是对的,所以你得到了我的接受和赞成,但做了一个查询,然后铸造,然后另一个查询从形式是最有效的方式来做到这一点。 – 2013-04-25 21:51:25

+0

@Scott。演员绝对是你的案子的问题。我的意思是说,还有其他一些我们在LINQ语句中无法做到的事情,例如使用诸如“toString()”之类的方法。我已经编辑了一些答案,以便说清楚。 – prashantsunkari 2013-04-25 21:52:40