У меня есть пользовательский класс в EF Code First, который содержит множество свойств, и у каждого пользователя есть коллекция «Контакты», которые являются другими пользователями в качестве подмножества общего количества пользователей. Другая коллекция "ContactOfOthers" - это просто обратный пример, показывающий, кто имеет этого пользователя в качестве контакта, поскольку это отношение многих ко многим.
public class User {
[Key]
public string UserName { get; set; }
// Lots of other properties not relevant to this question...
[NotMapped]
public bool IsMyContact { get; set; }
public virtual ICollection<User> Contacts { get; set; }
public virtual ICollection<User> ContactOfOthers { get; set; }
}
Я ввел несопоставленное (не сопоставленное с БД) свойство под названием IsMyContact . Это для случаев, когда пользователь запрашивает группу пользователей, и мне нужно показать в представлении, какие пользователи уже есть в их списке контактов. Так что это свойство должно быть истинным, если пользователь является частью их коллекции «Контакты». Его не следует сохранять в БД, поскольку он может отличаться для одного и того же пользователя в зависимости от пользователя, выполняющего запрос.
Есть ли хороший способ сделать это в запросе из контекста? Конечно, это можно сделать грубо, выполнив два запроса, затем итерируя по основному, ища совпадения в коллекции контактов пользователя, но мне интересно, есть ли более элегантный способ сделать это из одного запроса, проецируя запуск? время вычисляется столбец на это свойство?