是否有可能檢查LINQ查詢中的空值,當值爲空,它執行額外的(子)查詢,一次全部?檢查值是否爲空,當它是,執行額外(子)查詢
說明
我有我的數據庫中聲明默認的按鈕,默認描述。用戶可以自定義這些按鈕,這些設置存儲在ButtonLocations
表中。現在,每個按鈕都有一個標準描述,用戶可以編輯這個描述。當用戶編輯說明時,它將存儲在我的數據庫的Descriptions
表中。 當我檢索所有按鈕時,首先檢查按鈕是否有特定的描述(在按鈕位置,左連接)。如果這不是真(如此),我檢索默認的描述。
目前我得到所有我的實體與他們的描述,然後我循環遍歷所有他們檢查值是否爲空。這會導致對數據庫的多個查詢。
var temp = (from bl in context.buttonLocations
join b in context.Buttons
on bl.ButtonID equals b.ButtonID into buttons
from button in buttons.DefaultIfEmpty()
join d in context.Descriptions
on new
{
ID = bl.ButtonLocationID,
langID = languageID,
originID = descriptionOriginID
}
equals new
{
ID = d.ValueID,
langID = d.LanguageID,
originID = d.DescriptionOriginID
}
into other
where bl.ButtonGroupID == buttonGroupId
from x in other.DefaultIfEmpty()
select new
{
Button = button,
ButtonLocation = bl,
Description = x
}).ToList();
// Retrieve default descriptions if no specific one is set
foreach (var item in temp)
{
if (item.Description == null)
{
item.Description = context.Descriptions
.FirstOrDefault(x => x.ValueID == item.Button.ButtonID && x.LanguageID == languageID && x.DescriptionOriginID == (short)DescriptionOriginEnum.Button);
}
}
我已經試過了,它沒有工作。它給出了以下錯誤:*'無法創建'描述'類型的空常量值。 '* – Loetn
我認爲你的錯誤來自實體框架,因爲它不能將你的代碼翻譯成sql。 '(short)DescriptionOriginEnum.Button'可能是罪魁禍首 - 在構造查詢之前嘗試將它分配給一個'short'變量。這可能有所幫助:http://stackoverflow.com/a/17847159/150342 – Colin
這兩個建議的解決方案都沒有幫助。我猜這是不可能的? – Loetn