J'ai une base de données simple avec deux tables. Utilisateurs et configurations. Un utilisateur a une clé étrangère pour le lier à une configuration particulière.LINQ To SQL Weird Join Issue
J'ai un problème étrange où la requête suivante provoque toujours une jointure interne à la table de configuration indépendamment de la deuxième valeur de paramètre. Pour autant que je sache, même si la partie "UserConfiguration =" de l'initialisation de l'objet est conditionnelle, LINQ ne voit pas cela et détermine qu'une relation est suivie dans tous les cas.
Si je supprime réellement cette dernière initialisation, le tout fonctionne comme prévu. Il ne joint pas interne lorsque loadConfiguration == false et il se joint lorsque loadConfiguration == true.
Quelqu'un a-t-il des idées à ce sujet? Cette syntaxe ne fonctionne-t-elle pas? La seule pensée que j'ai maintenant est d'envelopper le retour dans une déclaration de base si - je voulais juste éviter les lignes en double.
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();
}
}
Merci à l'avance,
Martin.