[英]LINQ To SQL Weird Join Issue
我有一個帶有兩個表的簡單數據庫。 用戶和配置。 用戶具有外鍵以將其鏈接到特定配置。
我遇到一個奇怪的問題,即無論第二個參數值如何,以下查詢總是會導致內部聯接到配置表。 據我所知,即使對象初始化的“ 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();
}
}
提前致謝,
馬丁
我不認為它會那樣工作。
我建議將其分為2個不同的查詢。
也許有更好的方法,但是這需要更多的“麻煩”。
不,這是行不通的。 我已經多次遇到類似的問題。 這樣做的原因與編譯時的表達式與運行時的條件有關。
您可以執行2個查詢,或者如果不考慮加入配置而不考慮loadConfiguration參數,則可以使用:
var q = (from c in database.Users
where c.Username == username
select c).Single();
然后在結果上使用Linq-to-Objects。
用SingleOrDefault()替換.Single(),Linq將切換到左外部聯接。
我不知道您是否會這樣做,但在某些情況下會這樣做。
編輯dint看到Single適用於整個查詢,而不適用於配置部分:
嘗試這個:
UserConfiguration = (loadConfiguration && c.Configuration != null) ? new ApplicationConfiguration
{
ID = c.Configuration.ID,
MonthlyAccountPrice = c.Configuration.MonthlyAccountPrice,
TrialAccountDays = c.Configuration.TrialAccountDays,
VAT = c.Configuration.VAT,
DateCreated = c.Configuration.DateCreated
} : null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.