【发布时间】:2016-03-30 11:27:34
【问题描述】:
我对 mongodb 相当陌生,我正在尝试使用 byte 属性查询集合,但我得到了一个无效的强制转换异常。总而言之,
public class MongoDbAddressCollection
{
private IMongoCollection<Addresses> collection = database.GetCollection<Addresses>("AddressCollection");
public IEnumerable<Addresses> Where(System.Linq.Expressions.Expression<Func<Addresses, bool>> filter = null)
{
var items = collection.AsQueryable().Where(filter);
if (items == null)
return null;
return items.ToList();
}
}
public class Test
{
public void DoSomthingWithAddresses()
{
MongoDbAddressCollection addressCollection=new MongoDbAddressCollection();
//exception occurs in MongoDbAddressCollection.Where method when executing the ToList().
List<Addresses> homeAddresses=addressCollection.Where(x=>x.AddressType==(byte)EnumAddressType.HomeAddress);
foreach(var address in homeAddresses)
{
//do stuff
}
}
}
地址实体如下类
public class Address
{
public Guid UserId { get; set; }
public string Street { get; set; }
public byte AddressType { get; set; }
.....
}
public enum EnumAddressType
{
HomeAddress=1,
WorkAddress=2
}
实际上问题似乎是 mongodb 和 .net 之间的类型不匹配,我可以看到 WorkAddress 实体的 AddressType 是 10,这是 2 的二进制表示。但是,除了更改所有字节属性之外,我想不出解决方案在我们将所有实体插入到集合之前将它们转换为 int(我们在不同的实体中有很多字节属性)...或者可以通过查询中的解决方法来解决这个问题(linq where 条件)?
提前致谢。
【问题讨论】:
标签: c# mongodb linq mongodb-query mongodb-.net-driver