簡體   English   中英

如何為自引用多對多關系編寫高效的 LINQ 查詢?

[英]How to write an efficient LINQ query for a self-referential many-to-many relationship?

我有以下模型,表示人員和“助手”(這只是另一個人)之間的自我參照多對多關系:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<Person> Assistants { get; set; }
    public virtual ICollection<Person> AssistantTo { get; set; 
}

但是我在思考如何使用 LINQ有效地查詢特定助手時遇到了麻煩。 我知道我可以做這樣的事情:

    public Person GetAssistant(int assistedPersonId, int assistantId)
    {
        var assistedPerson = _context.People.Where(p => p.Id == assistedPersonId)
            .Include(a => a.Assistants)
            .FirstOrDefault();

        return assistedPerson.Assistants.FirstOrDefault(a => a.Id == assistantId);
    }

我將如何通過一個 LINQ 調用實現這一目標? 在偽代碼中,我正在尋找類似的東西:

    public Person GetAssistant(int assistedPersonId, int assistantId)
    {
        return = _context.People.Where(
            PERSONID == assistedPersonId AND 
                        PERSON HAS AN ASSISTANT WITH assistantId)
        ;
    }

由於助手也是人,我們可以直接加載它,而不必通過AssistantTo行獲取它。

查詢簡單地變為:

_context.People.FirstOrDefault(p => p.Id == assistantId);

但是,由於我們還包括業務邏輯(我們希望確保該助手實際上是正確人員的助手) - 我們可以限制查詢:

_context.People.FirstOrDefault(p => p.Id == assistantId && 
                        p.AssistantTo.Any(pa => pa.Id == assistedPersonId));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM