2013-04-11 118 views
1

的时候所以我有这个枚举枚举不能使用LINQ

public enum JobStatus 
{ 
    Created = 0, 
    Assigning = 1, 
    Assigned = 2, 
    Started = 3, 
    Finished = 4 
} 

在这个界面

public interface IJob 
{ 
    Guid Id { get; set; } 
    JobStatus Status { get; set; } 
    bool IsFaulted { get; set; } 
    string ErrorMessage { get; set; } 
} 

我扑通这些家伙在数据库中的一个不言而喻精细反序列化,和。这是看起来像。

{ "_id" : { "$uuid" : "4e5002b6-3c80-b497-4a33-46b0ea5a39bf"} 
, "_t" : "MyJobObject" 
, "Status" : 0 
, "IsFaulted" : false 
, "ErrorMessage" : null 
, "Location" : "overthere"} 

后来,当我尝试并抓住一个与此代码

Database.GetCollection<IJob>("Jobs").AsQueryable().FirstOrDefault(x=>x.Status == JobStatus.Created); 

抛出异常

Unable to determine the serialization information for the expression: jobs.Status. 
    at MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(Expression node, Dictionary`2 serializationInfoCache) 
    at MongoDB.Driver.Linq.Utils.BsonSerializationInfoHelper.GetSerializationInfo(Expression node) 
    at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression) 
    at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(BinaryExpression binaryExpression) 
    at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression) 
    at MongoDB.Driver.Linq.SelectQuery.BuildQuery() 
    at MongoDB.Driver.Linq.SelectQuery.Execute() 
    at MongoDB.Driver.Linq.MongoQueryProvider.Execute(Expression expression) 
    at MongoDB.Driver.Linq.MongoQueryProvider.Execute[TResult](Expression expression) 
    at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) 

我第一次去,我没有分配到整数的枚举和那产生了相同的结果。我在两台不同的机器上看到了这一点,还有两个全新的MongoDb安装,一个安装在Windows上,另一个安装在Ubuntu 12.04上。

不确定该怎么做,有什么想法?

回答

0

我落得这样做

Database.GetCollection<IJob>("Jobs").AsQueryable().ToEnumerable().FirstOrDefault(x=>x.Status == JobStatus.Created);

并能正常工作,但我有点担心,它可能会在这一点上拉低所有数据。虽然它没有出现任何缓慢的现象,并且我有一次超过5万条记录,并且您会认为如果发生了这种情况,您会看到性能下降。