如何获得输入的投影结果

时间:2019-03-03 17:12:18

标签: mongodb-.net-driver

我有这节课:

public interface IUsciteForList
{
    string Id { get; set; }
    string NumeroDocumento { get; set; }
    DateTime DataDocumento { get; set; }
    string Nominativo { get; set; }
    string Categoria { get; set; }
    string SubCategoria { get; set; }
    string Descrizione { get; set; }
    decimal? Importo { get; set; }
    DateTime? Scadenza { get; set; }
    string Destinatario { get; set; }
    bool IsPagata { get; }
}

public class Uscite :IUsciteForList
{
    [BsonRequired]
    [BsonId(IdGenerator =typeof(StringObjectIdGenerator))]
    public string Id
    {
        get; set;
    }
    [Display(AutoGenerateField =false)]
    [BsonRequired]
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    public DateTime DataOperazione
    {
        get; set;
    }
    //[Display(Name ="Numero documento",Order =1,AutoGenerateField =true)]
    [System.ComponentModel.DisplayName("Numero Documento")]
    [BsonIgnoreIfDefault]
    public string NumeroDocumento
    {
        get; set;
    }
    [Display(Name ="Data documento",Order =2,AutoGenerateField =true)]
    [DisplayFormat(DataFormatString ="{0:d")]
    [BsonRequired]
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    public DateTime DataDocumento
    {
        get; set;
    }
    [BsonRequired]
    [UpperCase]
    public string Nominativo
    {
        get; set;
    }
    [BsonRequired]
    [TitleCase]
    public string Categoria
    {
        get; set;
    }
    [BsonIgnoreIfDefault]
    [TitleCase]
    public string SubCategoria
    {
        get; set;
    }
    [BsonIgnoreIfDefault]
    public string Descrizione
    {
        get; set;
    }
    [BsonRequired]
    [BsonIgnoreIfDefault(true)]
    [BsonIgnoreIfNull(true)]
    [BsonRepresentation(MongoDB.Bson.BsonType.Decimal128)]
    public decimal? Importo
    {
        get; set;
    }
    [BsonIgnoreIfNull(true)]
    [BsonIgnoreIfDefault(true)]
    [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
    public DateTime? Scadenza
    {
        get; set;
    }
    [BsonIgnoreIfNull]
    public PagamentoMovimento Pagamento { get; set; }
    [BsonIgnoreIfNull]
    [BsonIgnoreIfDefault]
    public IEnumerable<FileVari.File> Files { get; set; }
    //[BsonIgnoreIfNull]
    //public string FileFatturaXml { get; set; }
    [BsonIgnoreIfDefault]
    [BsonIgnoreIfNull]
    public Model.FatturaData Fattura { get; set; }
    //[BsonIgnoreIfDefault]
    //public IFileMovimento[] Files { get; private set; }
    [BsonRequired]
    public string Destinatario { get; set; }
    bool _ispagata;
    [BsonIgnore]
    public bool IsPagata
    {
        get { return Pagamento != null ? true : false; }
        //set { _ispagata = value; }
    }
}
public class UscitaForList:IUsciteForList
{
    [Display(AutoGenerateField =false)]
    [BsonId(IdGenerator = typeof(StringObjectIdGenerator))]
    public string Id { get; set; }
    [Display(Name ="Numero documento",AutoGenerateField =true,Order =1)]
    [DisplayFormat()]
    public string NumeroDocumento { get; set; }
    [Display(Name = "Data documento", AutoGenerateField = true, Order = 2)]
    [DisplayFormat(DataFormatString ="{0:d}")]
    public DateTime DataDocumento { get; set; }
    [Display(Name = "Nominativo", AutoGenerateField = true, Order = 3)]
    public string Nominativo { get; set; }
    [Display(Name = "Categoria", AutoGenerateField = true, Order = 4)]
    public string Categoria { get; set; }
    [Display(Name = "Sub categoria", AutoGenerateField = true, Order = 5)]
    public string SubCategoria { get; set; }
    [Display(Name = "Descrizione", AutoGenerateField = true, Order = 6)]
    public string Descrizione { get; set; }
    [Display(Name = "Importo", AutoGenerateField = true, Order = 7)]
    [DisplayFormat(DataFormatString = "{0:#,##0.00}", NullDisplayText = "")]
    public decimal? Importo { get; set; }
    [Display(Name = "Scadenza", AutoGenerateField = true, Order = 8)]
    [DisplayFormat(DataFormatString ="{0:d}")]
    public DateTime? Scadenza { get; set; }
    [Display(Name = "Destinatario", AutoGenerateField = true, Order = 9)]
    public string Destinatario { get; set; }
    [Display(Name = "Pagata", AutoGenerateField = true, Order = 0)]
    [DisplayFormat()]
    public bool IsPagata { get; set; }
}

和这个投影:

var project = Builders<Uscite>.Projection.Expression(x => new
        {
            Id = x.Id,
            NumeroDocumento = x.NumeroDocumento,
            DataDocumento = x.DataDocumento,
            Nominativo = x.Nominativo,
            Categoria = x.Categoria,
            SubCategoria = x.SubCategoria,
            Descrizione = x.Descrizione,
            Importo = x.Importo,
            Scadenza = x.Scadenza,
            Destinatario = x.Destinatario,
            IsPagata = x.Pagamento != null ? true : false
        });

我使用以下代码获取输入的数据:

var data = App.db.GetCollection<Uscite>("tbUscite").Find(new BsonDocument()).Project(project).As<IUsciteForList>().Limit(50);

我收到此错误: System.FormatException:无法确定接口类型MongoDbApp.Model.Movimento.IUsciteForList反序列化的对象的实际类型

如果我使用:

var data = App.db.GetCollection<Uscite>("tbUscite").Find(new BsonDocument()).Project(project).As<UscitaForList>().Limit(50); 

我收到此错误: System.FormatException:元素“ DataOperazione”与MongoDbApp.Model.Movimento.UscitaForList类的任何字段或属性都不匹配

我的错误是什么?

谢谢

0 个答案:

没有答案