我在WP7(芒果)上使用C#。我嘗試,因爲我收到一個錯誤使用特殊查詢:Linq - 如何在查詢中使用函數
Method 'Int32 orderBirthday(System.DateTime)' has no supported translation to SQL.
是的,我知道... LINQ的不能使用我的功能,但我不知道正確的方式...
我有一個數據庫表,其列name
和birthday
。在我的查詢中,我將計算到下一個生日(所有項目)有多少天,然後我將按「降序」進行訂購。
static int orderBirthday(DateTime Birthday)
{
DateTime today = DateTime.Today;
DateTime birthday = Birthday;
DateTime next = new DateTime(today.Year, birthday.Month, birthday.Day);
if (next < today)
next = next.AddYears(1);
int numDays = (next - today).Days;
// No Conversion
return numDays;
}
public void LoadCollectionsFromDatabase()
{
DateTime today = DateTime.Today;
var toDoItemsInDB = from ToDoItem todo in toDoDB.Items
let daysToBirthday = orderBirthday(todo.ItemDate)
orderby daysToBirthday ascending
select todo;
// Query the database and load all to-do items.
AllToDoItems = new ObservableCollection<ToDoItem>(toDoItemsInDB);
.
.
.
}
但是,如果你這樣做,你會失去Linq的流式傳輸能力......如果有很多結果,這可能會導致OutOfMemoryException。你應該使用AsEnumerable而不是ToArray –
哇....它的工作很好:-) 非常感謝你! – John
請注意,當'Items'表中的記錄數量開始增加時,這將開始執行不良,因爲您會將該表的* complete *內容加載到內存中。 – Steven