从列表中的列表中获取所有元素

时间:2017-07-12 06:57:48

标签: c# litedb

我有以下数据模型:

    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检查过的数据库似乎没问题。

2 个答案:

答案 0 :(得分:0)

你可以得到这样的客户:

using System.Linq;

collectionCarts.SelectMany(c => c.OrderList.Select(o => o.Customer));

答案 1 :(得分: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));