Проблемы с select в LINQ2SQL
Здравствуйте, друзья! Вот мои сущности:
public class Subscription { [Key] public int id { get; set; } public string name { get; set; } public double data { get; set; } }
public class SubscriptionData { [Key] public int id { get; set; } [ForeignKey("subscription")] public int subscriptionId { get; set; } public virtual Subscription subscription { get; set; } [ForeignKey("company")] public int companyId { get; set; } public virtual Company company { get; set; } public double price { get; set; } }
public class Company { [Key] public int id { get; set; } public string name { get; set; } public ICollection<Client> clients { get; set; } public ICollection< SubscriptionData > subscriptions { get; set; } }
public class Client { [Key] public int id { get; set; } [ForeignKey("company")] public int companyId { get; set; } public virtual Company company { get; set; } [ForeignKey("subscription")] public int? subscriptionId { get; set; } public virtual Subscription subscription { get; set; } public string name { get; set; } }
Так и есть.
SubscriptionDataобертка, потому что каждая компания может иметь несколько цен на одну и ту же подписку.
Теперь я пытаюсь просто вернуть список клиентов с некоторыми вычисленными значениями.
У меня он такой:
Что я уже пробовал:
Я начинаю с IQueryable<company> companies, это возвращается репозиторием, а затем делаю это:
companies .Include(company => company.clients).ThenInclude(client => client.subscription) .Include(company => company.clients).ThenInclude(client => client.company).ThenInclude(company => company.subscriptions).ThenInclude(data => data.subscription) .Include(company => company.subscriptions).ThenInclude(data => data.subscription) .Select(company => company.clients .Select(client => new { proposedSubscription = client.company.subscriptions.FirstOrDefault(data => data.subscription.data < client.subscription.data) }))
Поэтому я хочу вернуть всех клиентов с новой предлагаемой подпиской, которая имеет меньше данных, чем подписка текущего клиента. У меня есть одна компания, и эта компания имеет 194 пользователя. Это условие:
proposedSubscription = client.company.subscriptions.FirstOrDefault(data => data.subscription.data < client.subscription.data)
выполняется для 4-х клиентов.
Но вместо того, чтобы получить 194 клиента с 4 предлагаемыми подписками, а остальные-с предлагаемыми подписками, установленными в null, я получаю только 4 возвращенных клиента.
Если я изменю условие на:
proposedSubscription = client.company.subscriptions.FirstOrDefault(data => data.subscription.data < 10000)
Затем я получаю 194 клиента, 4 с предлагаемым объектом подписки и остальные с предлагаемым объектом подписки, установленным в null.
Я не понимаю такого поведения LINQ 2 SQL.
Может ли кто - нибудь объяснить, что я делаю не так?
Gerry Schmitz
Почему бы вам не "показать" то, что находится в клиенте.подписка.данные вместо того, чтобы просто заменить их на 10000, а затем задаться вопросом "почему"?
csrss
Все объекты действительны, ни один из них не является нулем. Но мне кажется, что эта строка в sql просто тупая. Потому что даже простой SelectMany терпит неудачу, но нет нулей.