3

我有以下数据模型:

    public class Customer
    {
        [BsonId]
        public int CustomerId { get; set; }
        public string Name { get; set; }
    }

    public class Order
    {
        [BsonId]
        public int OrderId { get; set; }
        [BsonRef("customers")] 
        public Customer Customer { get; set; }
    }

    public class Cart
    {
        [BsonId]
        public int CartID { get; set; }
        public List<Order> OrderList { get; set; }
    }

现在我想通过对我的购物车集合的查询来访问客户。我试过这样的事情:

var collectionCarts = db.GetCollection<Cart>("carts");
var result = collectionCarts.Include("OrderList.Customer").Find(x => x.OrderList[0].Customer.CustomerId == 2);

但是,所有尝试都会导致一个空的客户对象。我用 LiteDB-Viewer 检查的数据库似乎没问题。

4

2 回答 2

4

你可以得到这样的客户:

using System.Linq;

collectionCarts.SelectMany(c => c.OrderList.Select(o => o.Customer));
于 2017-07-12T07:07:25.217 回答
0

您是否尝试仅检查列表中的第一项,或列表中的任何项目?因为在您的查询中,您只明确查询第一个。

如果不是(我假设),请尝试以下操作:

var result = collectionCarts.Include("OrderList.Customer").
                    Find(x => x.Select(v => v.OrderList).Select(v =>v.Customer).
                                     Select(v => v.CustomerId).ToList().Contains(2));
于 2017-07-12T07:29:49.583 回答