2015-04-02 47 views
1

我有以下類別:LINQ聯接查詢與ICollection的

public partial class Person : ModificationEntity 
{ 
    public Person() 
    { 
     this.PersonCompanies = new List<PersonCompany>(); 
    } 

    public System.Guid PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 

    public virtual ICollection<PersonCompany> PersonCompanies { get; set; } 
} 

public partial class PersonCompany : ModificationEntity 
{ 
    public System.Guid PersonCompanyId { get; set; } 
    public System.Guid PersonId { get; set; } 
    public System.Guid CompanyId { get; set; } 

    public virtual Company Company { get; set; } 
    public virtual Person Person { get; set; } 
} 

我需要查詢給出companyids(名單lstCompanyIds)的列表中的所有用戶。

所以我把所有的PersonCompanyId與下面的查詢:

var qpc = (from c in lstCompanyIds 
      join u in personCompanyService.GetPersonCompanies() 
      on c equals u.CompanyId 
      select u.PersonCompanyId).AsQueryable(); 

與此查詢,我想要得到的用戶:

var query = from q in GetUsers() 
      join q2 in qpc 
      on q.PersonCompanies.Select(y => y.PersonCompanyId) equals q2 
      select q; 

但是,這給出了一個編譯錯誤「之類的連接子句中的其中一個表達式不正確。在對「加入」的調用中,類型推斷失敗。 很明顯,因爲我試圖做一個選擇收集personcompanies。但是,我如何正確地做到這一點? (包含不工作,因爲我有兩個集合來比較...)

+0

您是否檢查了此問題和解決方案? :http://stackoverflow.com/questions/19184019/the-type-of-one-of-the-expressions-in-the-join-clause-is-incorrect-in-entity-fra – 2015-04-02 09:25:34

+0

是'PersonCompanyId'和相同類型的「q2」(* System.Guid *)? – Loetn 2015-04-02 09:27:04

+0

@BurakKarakuş是的,但無法弄清楚這是如何解決我的問題。 – JurgenStillaert 2015-04-02 09:28:13

回答

1

你可以嘗試

var qpc = (from res in 
         (from c in lstCompanyIds 
         join u in personCompanyService.GetPersonCompanies() 
         on c equals u.CompanyId 
         select u.PersonCompanyId) 
        join u in GetUser() 
        on res equals u.UserId 
        select u).AsQueryable(); 

我認爲這應該工作

請確保您比較所有ID是類型System.Guid

+0

我做了一些修改,它似乎工作(u.PersonCompanyId => u.PersonId和res等於u.PersonId)。我必須測試更多,但似乎工作。 – JurgenStillaert 2015-04-02 10:29:07

1

這裏的問題是,您正在比較IQueryable<Guid>Guid。如果我理解正確的你,那就是你想達到什麼目的:

IQueryable<Guid> companyIds = Enumerable.Empty<Guid>().AsQueryable(); //qpc in your question 
IQueryable<Person> persons = Enumerable.Empty<Person>().AsQueryable(); //q in your question 
var result = persons.Where(person => person.PersonCompanies 
      .Any(company => companyIds.Contains(company.CompanyId))); 
+0

我試過這個,但沒有得到任何結果重新調整(它應該)。我試圖解決這個問題。 – JurgenStillaert 2015-04-02 10:00:40

+0

@JurgenStillaert這兩個輸入集合都是非空的,你沒有得到異常和錯誤,但結果是空的? – nikis 2015-04-02 10:16:21