在我的模式中,我有兩個數據庫表。關係和relationship_memberships。我試圖從關係表中檢索所有具有特定成員的條目,因此必須將其與relationship_memberships表一起加入。我在我的業務對象下面的方法:Linq在加入時返回的結果太多
public IList<DBMappings.relationships> GetRelationshipsByObjectId(int objId)
{
var results = from r in _context.Repository<DBMappings.relationships>()
join m in _context.Repository<DBMappings.relationship_memberships>()
on r.rel_id equals m.rel_id
where m.obj_id == objId
select r;
return results.ToList<DBMappings.relationships>();
}
_Context是基於概述here的代碼我使用的通用代碼庫。
問題是我在關係表中有3條記錄,並且在成員表中有3條記錄,每個成員關係都與不同的關係有關。 2個成員資格記錄的obj_id值爲2,另一個爲3.我試圖檢索與對象#2相關的所有關係的列表。
當此linq運行時,_context.Repository<DBMappings.relationships>()
返回正確的3條記錄,_context.Repository<DBMappings.relationship_memberships>()
返回3條記錄。但是,執行results.ToList()時,生成的列表有兩個問題:
1)結果列表包含6條記錄,所有類型爲DBMappings.relationships()。經過進一步檢查,每個真實關係記錄都有2個,都是相互精確的副本。
2)將返回所有的關係,即使m.obj_id == 3,即使OBJID變量正確傳遞爲2
任何人都可以看到發生了什麼,因爲我已經了2天在看這段代碼和我無法理解什麼是錯的。我加入了其他的似乎工作得很好的linq查詢,而且我的單元測試表明他們仍然在工作,所以我必須在這方面做錯了什麼。好像我需要在這一個:)
編輯一個額外的一雙眼睛:好了,所以它似乎是整個問題是我設計我的單元測試的方式,因爲單元測試沒有實際分配ID值到記錄,因爲它沒有觸及sql(用於單元測試)。
標記下面的答案作爲答案,但我喜歡他更好地加入到一起的方式。
似乎能夠加入所有的R到所有的m,使得9條記錄,然後過濾下降到6條,其中m.obj_id == OBJID,所以它的上子句ISN我認爲,沒有工作。我們可以得到對象的定義嗎?它可能有助於 – pdr 2010-05-10 00:08:09
關係對象只是由dbml生成的sql類的linq。關係表截至目前只有一個ID號和一個名稱標籤。 – KallDrexx 2010-05-10 12:06:50