2013-01-31 76 views
1

我對Simple.Data進行了調用,我想限制正在返回的列。不過我打的問題..Simple.Data選擇特定列

這工作得很好:

var db = Database.Open(); 

var questionIdRow = db.Question.FindByFriendlyId(friendlyId); 

if (questionIdRow == null) return Guid.Empty; 

return questionIdRow.QuestionId; 

但是,下列不工作(我得到一個Simple.Data.UnresolvableObjectException '未找到列')

var db = Database.Open(); 

var questionIdRow = db.Question.FindByFriendlyId(friendlyId) 
           .Select(db.Question.QuestionId); 

if (questionIdRow == null) return Guid.Empty; 

return questionIdRow.QuestionId; 

我根據Simple.Data文檔的印象,這是我需要做的所有事情來限制選定的列。請注意,選擇只是選擇稍後引用的同一列。

var questionIdRow =行上引發了實際的異常。

有人可以給我一些指導嗎?

回答

1

這是一個常見問題,並且實際上導致FindBy在我們甚至達到1.0之前被棄用。問題是FindBy直接返回一條記錄,所以你不能繼續調用它的查詢方法。

正確的方法是調用FindAllBy並與第一或FirstOrDefault結束:,我用FindBy

var db = Database.Open(); 

var questionIdRow = db.Question.FindAllByFriendlyId(friendlyId) 
          .Select(db.Question.QuestionId) 
          .FirstOrDefault(); 

if (questionIdRow == null) return Guid.Empty; 

return questionIdRow.QuestionId; 
+0

夠好回答我,因爲我認爲它會比FindAllBy更有效,但我想我'試試吧,看看它在創建一個屁股之前創建了哪些sql .. – Ash

+1

「FirstOrDefault」爲執行的SQL添加了「TOP 1」,因此它效率可以高。 –