我有一個表達式不願意被SQLITE中的LINQ處理。在Windows 8.1上的Sqlite-net Windows應用商店應用程序 - 無法編譯「不」
使用SQLLite 3.8.3.1 使用SQLite網2.1
的表達式是:
int stars = location.MinRating;
bool onlyLargePhotos = location.OnlyLargePhotos;
var query = db.MediaItems.Where(x => x.LocationId == location.LocationId && x.Rating >= stars && (!onlyLargePhotos || (onlyLargePhotos && (x.Width >= 2000 || x.Height >= 2000))));
這個查詢,訪問時,失敗。它似乎正在絆倒!onlyLargePhotos。
唯一的例外是:
System.NotSupportedException occurred
HResult=-2146233067
Message=Cannot compile: Not
Source=SQLite.Net
StackTrace:
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.GenerateCommand(String selectionList)
at SQLite.Net.TableQuery`1.Count()
at SmartFrame.Mosh.DB.WeightedLocationHelper.<>c__DisplayClass9.<CalculateWeightsAsync>b__2(IndexConnection db)
InnerException:
而且 - 誰能告訴我,如果有一種方法,看看有什麼SQL查詢是要執行?在SQL LINQ中,IQueryable的ToString()會告訴你將要執行什麼。 (我知道我可以通過創建兩個不同的LINQ表達式來解決這個問題..但是,我將會有更多的排列 - 我將檢查更多的字段 - 因此,我不想有8-16個我需要維護的查詢 - 我希望工作由SQL引擎完成)
正如我在下面寫的 - 我將在那裏有更多的條件。如果我開始分解它們,我需要維護的數量將呈指數級增長(或至少接近指數級增長,因爲它們中的一些將相互排斥)。感謝你的回答。 –
當然,如果你打算增長,解決方案必須進行調整。我不熟悉你的代碼,這就是我提出這個建議的原因。無論如何,希望對你至少有用,因爲你可以告訴你問題是什麼。如有需要,請隨時諮詢。 – Samuelens