Ben mongodb için oldukça yeni ve bir koleksiyon bayt özelliği ile sorgulamaya çalışıyorum ancak geçersiz bir özel durum alıyorum. ,C# sürücüsüyle mongodb'de bir bayt özelliğine karşı bir koleksiyonu sorgulama
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
}
}
}
özetlemek Ve adres varlık
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
}
Aslında mesele MongoDB ve .net arasında bir tür uyumsuzluğu gibi görünüyor sınıf aşağıdaki gibidir için ben WorkAddress varlıklar için AddressType olduğunu görebiliriz 10'un ikili temsili olan 10 Ancak, tüm varlıklarımızdaki tüm bayt özelliklerini değiştirmeden başka bir çözümü düşünemiyorum. Bu koleksiyonları koleksiyonlara eklemeden önce (farklı varlıklarda çok sayıda bayt mülkümüz var) ... Veya Bu, sorgudaki bir geçici çözümle giderilebilir (koşul olarak linq)?
Gelişmiş teşekkürler.
Yanıt Mennan için teşekkürler. Özellik türünü enum olarak değiştirmek gerçekten bir seçenek değildir çünkü özellik veritabanındaki küçük bir sütuna karşılık gelir ve varlık otomatik olarak oluşturulur ... Özel seri hale getirmeyi denedim ve veriler şimdi mongodb'de gayet iyi ama yine de Where (filter) .ToList() yöntemini yürütürken istisna. –