我知道實體框架查詢不能包含數組。例如,這將失敗:爲什麼我們不能在實體框架查詢中使用數組?
var myRow = DbContext.myTable.Single(d => d.Property1 == myArray[0].Property1);
但是,如果我分配一個元素到一個變量第一這樣的:
var property1 = myArray[0].Property1;
var myRow = DbContext.myTable.Single(d => d.Property1 == property1);
然後,它的工作原理。爲什麼編譯器不能爲我們做這件事?它在許多其他情況下已經通過語法糖進行了優化並提供了我們的捷徑。有沒有模糊的來源會阻止編譯器將數組元素複製到後臺的臨時變量中?還是其他原因?
這不是C#編譯器的限制,而是Linq to Entities提供程序。 –
因爲在你的第二段代碼中,你正在使用一個常量值,而這個值又可以是表達式的一部分。第一段代碼中的linq不能轉換爲表達式。 –
關於幾乎每個不會被LINQ-to-EF/LINQ-to-SQL提供程序轉換爲SQL的特定方法/屬性,都有許多類似的(不完全重複的)討論。即http://stackoverflow.com/questions/3360772/linq-contains-case-insensitive與其他討論有很好的聯繫。 –