2013-08-16 53 views
0

我已經查看了各種Q & A這種情況,但我的錯誤仍然存​​在。LINQ加入多個條件返回錯誤

我有以下幾點:{?b.UserID = INT,b.eventid = INT}

Int32 eid = Convert.ToInt32(this.ddlPrograms.SelectedItem.Value); 
var participants = 
    from b in _dc.WebProgramParticipants 
    join d in _dc.webeventaffiliations 
     on new { b.UserID, eid } equals new { d.userid, d.eventid } 
    join c in _dc.WebPersonalInfos 
     on b.UserID equals c.UserID 
    where (b.eventid == eid) select 
    new { b.ParticipantID, c.FirstName, c.LastName, c.Email, d.institution }; 

類型有問題的參與和平等{d.userid = INT,d.eventid = int}

「連接子句中某個表達式的類型不正確,錯誤的類型推斷在調用」加入「時失敗。不會消失。這是說第一個連接有類型問題,但唯一的問題是,b.eventid是可以爲空的,我認爲包括eid變量會起作用,但它不會。

這是怎麼回事?

+0

每邊都有哪些類型? – SLaks

+0

看起來'b.UserID'的類型與'd.userid'的類型不同,和/或'eid'和'd.eventid'的類型相同,因此匿名對象具有不同種類。 – cdhowie

+0

所有的ID都是int類型的。我不得不創建變量eid來彌補可空類型b.eventid – mattgcon

回答

0

解決了以下

var participants = from b in _dc.WebProgramParticipants join d in _dc.webeventaffiliations on new { UserID = b.UserID, eventid = eid } equals new { UserID = d.userid, eventid = d.eventid } join c in _dc.WebPersonalInfos on b.UserID equals c.UserID where (b.eventid == eid) select new { b.ParticipantID, c.FirstName, c.LastName, c.Email, d.institution }; 

確保上的連接條件兩邊種有相同的情況。 (對於C#無論如何)