У меня есть простая база данных с двумя таблицами. Пользователи и конфигурации. У пользователя есть внешний ключ, чтобы связать его с определенной конфигурацией.
У меня странная проблема, когда следующий запрос всегда вызывает внутреннее соединение с таблицей конфигурации независимо от значения второго параметра. Насколько я могу судить, хотя часть инициализации объекта «UserConfiguration =» является условной, LINQ этого не видит и определяет, что в любом случае соблюдается отношение.
Если я на самом деле удаляю эту последнюю инициализацию, все работает как положено. Это не внутреннее соединение, когда loadConfiguration == false, и это действительно, когда loadConfiguration == true.
У кого-нибудь есть идеи по этому поводу? Этот синтаксис просто не будет работать? Единственная мысль, которая у меня сейчас есть, - обернуть возврат в базовое выражение if - я просто хотел избежать дублирующихся строк.
public UserAccount GetByUsername(string username, bool loadConfiguration)
{
using (Database database = new Database())
{
if (loadConfiguration)
{
DataLoadOptions loadOptions = new DataLoadOptions();
loadOptions.LoadWith<User>(c => c.Configuration);
database.LoadOptions = loadOptions;
}
return (from c in database.Users
where c.Username == username
select new UserAccount
{
ID = c.ID,
ConfigurationID = c.ConfigurationID,
Username = c.Username,
Password = c.Password.ToArray(),
HashSalt = c.HashSalt,
FirstName = c.FirstName,
LastName = c.LastName,
EmailAddress = c.EmailAddress,
UserConfiguration = (loadConfiguration) ? new ApplicationConfiguration
{
ID = c.Configuration.ID,
MonthlyAccountPrice = c.Configuration.MonthlyAccountPrice,
TrialAccountDays = c.Configuration.TrialAccountDays,
VAT = c.Configuration.VAT,
DateCreated = c.Configuration.DateCreated
} : null
}).Single();
}
}
Заранее спасибо,
Martin.