簡體   English   中英

Mongo DB C#,使用接口查詢

[英]Mongo DB C#, query with interface

我有以下問題:有我的界面:

 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));

    }

}

功能有問題

 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;
    }

然后在啟動時遵循以下代碼:

//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

然后顯示“其他信息:無法確定表達式的序列化信息:e.Id。” 在功能FindById中

var query = Query<IObjectWithID>.Where(e => e.Id == id);

但是當我將其切換為:

var query = Query<Order>.Where(e => e.Id == id);
var item = cursor.Collection.FindOneAs<Order>(query);

它工作正常。

問題是不想在此函數中使用if語句,我想使用漂亮,干凈的接口。

提前謝謝!

用T交換IObjectWithID:

 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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM