2010-08-08 60 views
1

如何重新配置​​實體數據模型查詢以解決分析錯誤?下面是該查詢:重新構建EF4查詢以避免解析錯誤?

var selectedNotes = notes 
     .Where(n => n.Tags.Count == 0) 

,這裏是正被拋出的異常:

There was an error parsing the query. [ Token line number = 12,Token line offset = 53,Token in error = AS ] 

這裏的背景是我的問題:

我對使用實體的應用程序工作框架4.該應用程序組織稱爲Notes的富文本文檔,可以通過標籤進行搜索,例如博客條目。我的一個實體數據模型的查詢只檢索沒有標籤註釋:

searchResults = DataStore.ObjectContext.Notes.WhereContainsNoTags(); 

WhereContainsNoTags()寫成一個LINQ擴展方法,它包含查詢的lambda表達式:

public static IQueryable<Note> WhereContainsNoTags(this IQueryable<Note> notes) 
{ 
    IQueryable<Note> results; 

    // Select Notes that contain no search Tags 
    var selectedNotes = notes 
     .Where(n => n.Tags.Count == 0) 
     .OrderBy(n => n.Title); 
    results = selectedNotes; 

    // Set return value 
    return results; 
} 

爲了簡化,我省略了包裝lambda表達式的try-catch塊和記錄任何錯誤的日誌記錄代碼。

這是奇怪的部分:查詢在我的開發機器上運行良好,但它在測試機器上引發上述異常。我還有其他幾個查詢(匹配所有標籤,匹配任何標籤等),這些查詢在開發和測試機器上運行良好。

我在斷定異常與EDM查詢生成的SQL有關。是這樣嗎?什麼是最好的解決方法?有沒有辦法重新構造lambda表達式來避免這個問題?

感謝您的幫助。

回答

4
var selectedNotes = notes.Where(n => !n.Tags.Any()) 
+0

謝謝,但這不會真的幫助我 - 它將選擇不包含任何指定標記集的Notes。我想選擇根本沒有標籤的Notes。 – 2010-08-09 00:10:11

+0

不確定「指定的一組標籤」是什麼意思。如果集合中至少有一個元素,則Any()返回「true」,如果集合中有0個元素,則返回「false」。因此「!n.Tags.Any()」和「n.Tags.Count == 0」將始終返回相同的值。 – Yakimych 2010-08-09 07:29:15

+0

現在我明白了!謝謝您的幫助。接受和+1。 – 2010-08-09 14:45:46