c#MongoDB从字段中选择字段列表

时间:2015-02-28 13:34:16

标签: c# mongodb

假设我将此文档结构存储在MongoDB数据库中。

{
    "_id" : ObjectId("54f131f3c4ca7b044eb11171"),
    "services" : "gegsg",
    "validCertificateOrLicense" : {
        "title" : "asfasf",
        "number" : "fasfsdf",
        "dateIssued" : "fsdffsdfsdf",
        "validUntil" : "fsdfsdfd",
        "issuingAgency" : "fsdfsd"
    }
}

我想在我的Binding中列出要在我的DataGrid上使用的那些字段,我试图使用在几个堆栈问题上发布的解决方案。但是没有一个工作,我试图使用Console.WriteLine(BindList.Count)来检查查询是否有效。

class facultyData
{

    public ObjectId _id { get; set; }
    public string services { get; set; }
    public List<certification> validCertificateOrLicense { get; set; }

}

class certification
{
    public string title { get; set; }
    public string number { get; set; }
    public string dateIssued { get; set; }
    public string validUntil { get; set; }
    public string issuingAgency { get; set; }
}

这是我尝试过的解决方案之一。

  var query =  collection.AsQueryable<facultyData>()
             .Where(c => c.validCertificateOrLicense.Any(d => d.stores.Count() == 1);

或者我的ToList代码可能存在问题

List<facultyData> acadList = query1.ToList<facultyData>();   
        BindingList<facultyData> acadBinding = new BindingList<facultyData>(acadList);

2 个答案:

答案 0 :(得分:0)

我认为这会起作用

 var acadList = Database.GetCollection<facultyData>("facultyData").AsQueryable().Where(f => f.validCertificateOrLicense.Any()).ToList();

答案 1 :(得分:0)

您的班级facultyData包含validCertificateOrLicense字段中的认证列表。但是,数据库中的文档结构仅包含validCertificateOrLicense字段中的单个证书。

如果您的数据库中的文档结构如下,那么您的查询应该可以正常工作

{
    "_id" : ObjectId("54f131f3c4ca7b044eb11171"),
    "services" : "gegsg",
    "validCertificateOrLicense" : [{
        "title" : "asfasf",
        "number" : "fasfsdf",
        "dateIssued" : "fsdffsdfsdf",
        "validUntil" : "fsdfsdfd",
        "issuingAgency" : "fsdfsd"
    }]
}

注意 - validCertificateOrLicense字段现在包含certification子文档数组。

或者,您可以更改c#实体以匹配数据库中的现有文档结构。您的facultyData对象如下所示

class facultyData
{

    public ObjectId _id { get; set; }
    public string services { get; set; }
    public certification validCertificateOrLicense { get; set; }

}

注意 - 现在validCertificateOrLicense字段只包含一个certification文档。