2010-05-12 24 views
1

我遇到動態Linq庫的問題。我得到了一個下面的錯誤「ParserException被用戶代碼未處理」)「或','」我有一個Dicitionary,我想創建一個基於這個字典的查詢,所以我通過我的字典循環並追加到一個字符串構建器「PersonId =(GUID FROM DICTIONARY)。我認爲問題是我追加到PersonId出於某種原因,我似乎無法將我的字符串GUID轉換爲GUID,因此動態庫不會崩潰。動態Linq庫指導例外

我已經嘗試過將我的字符串GUID轉換爲GUID,但沒有運氣。

query.Append("(PersonId = Guid(" + person.Key + ")"); 

query.Append("(PersonId = " + person.Key + ")"); 

我使用VS 2010 RTM和RIA服務以及實體框架4

//This is the loop I use 
foreach (KeyValuePair<Guid, PersonDetails> person in personsDetails) 
{ 
    if ((person.Value as PersonDetails).IsExchangeChecked) 
    { 
     query.Append("(PersonId = Guid.Parse(" + person.Key + ")"); 
    } 
} 

//Domain service call 
var query = this.ObjectContext.Persons.Where(DynamicExpression.ParseLambda<Person, bool>(persons)); 

請幫助,如果你知道這樣做的更好的辦法,我願意接受建議。

回答

2

使用參數化查詢,例如:

var query = this.ObjectContext.Persons.Where(
    "PersonId = @1", new [] { person.Key }); 
+1

這在古代,但'@ 1'應該是'@ 0'(它們是零索引的) – JoeBrockhaus 2016-10-05 05:26:33

1

你嘗試(注意額外的 ')')。

query.Append("(PersonId = Guid(" + person.Key + "))"); 
5

對於具有動態LINQ查詢使用性能和的Equals GUID的比較()方法等所提供的樣本。

var items = new[] 
      { 
       new { Id = Guid.Empty }, 
       new { Id = Guid.NewGuid() }, 
       new { Id = Guid.NewGuid() }, 
       new { Id = Guid.NewGuid() } 
      }; 

var result = items.AsQueryable() 
    .Where("Id.Equals(@0)", Guid.Empty) 
    .Any(); 
+1

確認這適用於實體框架。 – CodeGrue 2013-03-15 20:18:50

+0

已確認與EntityFramework 6.1一起工作(版本與EF大聲笑有關) – TravisWhidden 2015-08-10 21:01:38