Mongo DB C#,带接口的查询

Mongo DB C#,带接口的查询,c#,mongodb,interface,C#,Mongodb,Interface,我有以下问题: 这是我的界面: public interface IObjectWithID { ObjectId Id { get; set; } } 我的目标: public class Order : IObjectWithID { [BsonId] public ObjectId Id { get; set; } private Customer customer; public Custom

我有以下问题: 这是我的界面:

 public interface IObjectWithID
{
    ObjectId Id { get; set; }
}
我的目标:

public class Order : IObjectWithID
{
    [BsonId]
    public ObjectId Id
    {
        get;
        set;
    }

    private Customer customer;

    public Customer Customer
    {
        get { return customer; }
        set { customer = value; }
    }

    public Employees employee;

    private Employees Employee
    {
        get { return employee; }
        set { employee = value; }
    }

    public IList<Product> Products = new List<Product>();

    public Order(Customer customer, Employees employee, params Product[] product)
    {

        this.customer = customer;
        this.employee = employee;
        TabelaPosredniaKlientOrder.Tabela.Add(new ObiektPosredniKlientOrder(this.Id, Customer.Id));
        TabelaPosredniaPracownikOrder.Tabela.Add(new ObiektPosredniPracownikOrder(this.Id, Employee.Id));

    }

}
公共类顺序:IObjectWithID
{
[BsonId]
公共对象Id
{
得到;
设置
}
私人客户;
公众客户
{
获取{返回客户;}
设置{customer=value;}
}
公共雇员;
私人雇员
{
获取{return employee;}
设置{employee=value;}
}
公共IList产品=新列表();
公共秩序(客户、员工、员工、params产品[]产品)
{
this.customer=customer;
this.employee=employee;
TabelaPosredniaKlientOrder.Tabela.Add(新的obiektposrednikliantorder(this.Id,Customer.Id));
TabelaPosredniaPracownikOrder.Tabela.Add(新obiektposredniapracownikorder(this.Id,Employee.Id));
}
}
这是一个有问题的函数

 public static IObjectWithID FindById<T>(MongoCursor cursor, ObjectId id) where T: IObjectWithID
    {
        var query = Query<IObjectWithID>.Where(e => e.Id == id);
        var item = cursor.Collection.FindOneAs<IObjectWithID>(query);

        return item;
    }
publicstaticiobjectwithid FindById(mongocursorsorcursor,ObjectId id),其中T:IObjectWithID
{
var query=query.Where(e=>e.Id==Id);
var item=cursor.Collection.FindOneAs(查询);
退货项目;
}
然后是启动时的以下代码:

//database initialization code
// collection initialization code

var neworder = new order(param1, param2, param3);
collection.Inser(neworder); //everything fine

var item = FindByID<Order>(cursor, neworder.Id); //cursor is initializated
//数据库初始化代码
//集合初始化代码
var neworder=新订单(param1、param2、param3);
收藏。插图(新订单)//一切都好吗
var item=FindByID(游标,neworder.Id)//光标已初始化
然后在第行的函数FindById中显示“附加信息:无法确定表达式的序列化信息:e.Id”

var query = Query<IObjectWithID>.Where(e => e.Id == id);
var query=query.Where(e=>e.Id==Id);
但当我把它换成:

var query = Query<Order>.Where(e => e.Id == id);
var item = cursor.Collection.FindOneAs<Order>(query);
var query=query.Where(e=>e.Id==Id);
var item=cursor.Collection.FindOneAs(查询);
它很好用

问题是我不想在这个函数中使用multiply if语句,我想使用漂亮、干净的接口


提前谢谢

将IObjectWithID与T交换:

 public static IObjectWithID FindById<T>(MongoCursor cursor, ObjectId id) where T: IObjectWithID
    {
        var query = Query<T>.Where(e => e.Id == id);
        var item = cursor.Collection.FindOneAs<T>(query);

        return item;
    }
publicstaticiobjectwithid FindById(mongocursorsorcursor,ObjectId id),其中T:IObjectWithID
{
var query=query.Where(e=>e.Id==Id);
var item=cursor.Collection.FindOneAs(查询);
退货项目;
}

您可以使用泛型,我使用的这段代码是我问题的答案-如果我知道如何将您的答案标记为有用,我会这样做。