首页 > 解决方案 > 通过 Linq 左连接使用来自多个 MongoDB 集合的信息填充类

问题描述

我对 MongoDB 数据库上的 C# 中的 LINQ 连接有疑问。这是我要填写的课程:

public class CompanyProduct
{ 
    public string _id { get; set; }
    public string paymentId { get; set; }
    public string productId { get; set; }
    public string date { get; set; }
    public string name { get; set; }
}

此模型中的日期来自另一个类:

public class Payment
{
    public string _id { get; set; }
    public string date { get; set; }
}

以及另一个名称和图标:

public class Product
{
    public string _id { get; set; }
    public string name { get; set; }
}

为了填写CompanyProduct所有必要的信息,我可以对所有适用的存储库执行三个不同的查询,但为了简化这个过程,我试图将它们集成到 1 个查询中。目前我在这个:

public List<CompanyProduct> List(string id)
{
    var productCollection = db.GetCollection<Product>("products");
    var paymentCollection = db.GetCollection<Payment>("payments");

    var query = from c in this.collection.AsQueryable().Where(x => x._id == id)
        join pr in productCollection.AsQueryable() on c.productId equals pr._id into pr
        join pa in paymentCollection.AsQueryable() on c.paymentId equals pa._id into pa
        select new CompanyProduct()
        {
            _id = c._id,
            date = pa.First().date,
            name = pr.First().name,
        };

    return query.ToList()
}

来自 MongoDB 的一些文档示例:

公司产品:

公司产品在数据库中

支付:

数据库支付

产品:

数据库中的产品

然而,在这个结构中pa.First()总是pr.First()返回null......我什至尝试摆脱into pr和改变pr.First().namepr.name但这并没有什么不同。

我在这里做错了什么?我需要实施哪些改进?

标签: c#mongodblinq

解决方案


推荐阅读