2015-10-22 85 views
1

我不確定爲什麼這不能正常工作。是否可能是因爲我試圖在數據類上使用表達式而不是該類中的單個字段?除()和Intersect()不能正常工作 - LINQ

adminOnlyGroups應該返回管理員擁有組和用戶沒有,但它返回所有管理的

userOnlyGroups在做同樣的,它返回所有用戶

commonGroups應該返回他們的共同點,其中有兩個羣體,但它返回null或空

數據類

[DataContract] 
public class InvestigatorGroupData 
{ 

    [DataMember] 
    public int InvestigatorGroupId { get; set; } 

    [DataMember] 
    public string InvestigatorGroupName { get; set; } 

} 

摘錄我的控制器的

IEnumerable<InvestigatorGroupData> adminGroups = proxy.GetInvestigatorGroups(adminId); 
IEnumerable<InvestigatorGroupData> userGroups = proxy.GetInvestigatorGroups(userId); 

// Groups that admin has and user doesn't. These will be enabled and unselected 
IEnumerable<InvestigatorGroupData> adminOnlyGroups = adminGroups.Except(userGroups); 

// Groups that the user has and admin doesn't. These will be disabled and selected 
IEnumerable<InvestigatorGroupData> userOnlyGroups = userGroups.Except(adminGroups); 

// Groups in common. These will be enabled and selected 
IEnumerable<InvestigatorGroupData> commonGroups = adminGroups.Intersect(userGroups); 

if (commonGroups.IsNullOrEmpty()) 
{ 
    return View("Error"); 
} 
+4

您需要爲您的類定義相等成員。 – Levesque

+0

你在哪裏定義了IComparable?否則,你正在檢查相同的對象。 –

+1

它看起來像你的代碼使用引用相等,但你希望基於Id屬性的相等。編寫一個合適的IEqualityComparer並將其傳遞給Except。 – CodesInChaos

回答

0

你需要實現的對象

這一個相等比較之前這裏 Using Linq Except not Working as I Thought

已經有了答案,請請參閱下面的博客文章來自MSDN的進一步解釋 http://blogs.msdn.com/b/csharpfaq/archive/2009/03/25/how-to-use-linq-methods-to-compare-objects-of-custom-types.aspx

如果你是匿名類型,它將工作不同,沒有相等比較器。下面是一個示例代碼

http://odetocode.com/blogs/scott/archive/2008/03/25/and-equality-for-all-anonymous-types.aspx

+1

如果你發現一個重複的問題,你應該*投票結束問題作爲重複*沒有發佈鏈接到重複的答案。 – Servy

+0

謝謝Servy。我沒有打算爲重複鏈接發佈評分。只是試圖在這裏有所幫助。不過,我會給你一個建議的投票。謝謝 – samsur

+0

這個博客非常完美,非常感謝! –