3
我在用戶組內有動態字段,我想根據用戶組的用戶來選擇它們。SelectMany查詢太多
基本上我想模擬像.Where(x => x.UserGroupId == x || ...
這樣的查詢,因爲否則它會產生大約20個查詢來獲取動態字段。
也許我可以以某種方式傳遞整數數組作爲UserGroupId
,它將模擬與||
查詢。
這是我的例子中,兩個結果輸出是相同的,唯一的區別是第一個具有20個查詢數據庫和第二僅具有1
public IEnumerable<UserGroup> UserGroups
{
get
{
var db = new MainDataContext();
return db.UserGroupUsers.Where(x => x.UserId == this.Id).Select(x => x.UserGroup);
}
}
public IEnumerable<UserDynamicField> DynamicFields
{
get
{
var db = new MainDataContext();
var fields = this.UserGroups.SelectMany(x => x.UserGroupDynamicFields); // 20+ queries
var fields2 = db.UserGroupDynamicFields.Where(x =>
x.UserGroupId == 1 ||
x.UserGroupId == 2 ||
x.UserGroupId == 3 ||
x.UserGroupId == 4 ||
x.UserGroupId == 5 ||
x.UserGroupId == 6 ||
x.UserGroupId == 7 ||
x.UserGroupId == 8 ||
x.UserGroupId == 9 ||
x.UserGroupId == 10); // 1 query, maybe I can somehow pass array of Id's here?
}
}
該死!這很容易,我認爲這會更困難。謝謝:) – sed
@Steve很高興幫助。一般而言,如果您將集合保留爲'IQueryable',那麼在其上執行的任何Linq方法都將在數據庫上運行,而不是在本地運行的'IEnumerble '。然而,它們都利用了懶惰執行的優勢,所以在你真正嘗試獲得結果之前它不會運行。 –
是的,但'DynamicFields'應該可以保留'IEnumerable',因爲它使用'yield return',我不能使用'IQueriable'。 – sed