2013-01-31 43 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”,因此它效率可以高。 –