mongodbが新しく、バイトプロパティを持つコレクションをクエリしようとしていますが、無効なキャスト例外が発生しています。要約mongodbのバイトプロパティに対するコレクションをC#ドライバで照会しています
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にはあることがわかりますしかし、私はコレクションに挿入する前に、すべてのエンティティのすべてのエンティティのすべてのバイトプロパティをintに変更する以外の解決策は考えられません(別のエンティティには多くのバイトプロパティがあります)...またはこれは、問題の回避策(linq where条件)で修正できますか?
ありがとうございました。
回答ありがとうございました。プロパティの型を列挙型に変更することは、プロパティがデータベースのtinyint列に対応し、エンティティが自動生成されるため実際にはオプションではありません...カスタムシリアルライザを試しましたが、mongodbではデータは正常ですが、 Where(filter).ToList()メソッドを実行しているときは例外です。 –