![](/img/trans.png)
[英]c# - what collection type is recommended for self-referential many-to-many model?
[英]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.