【问题标题】:How to get value from a parent class and a nested array child using linq?如何使用 linq 从父类和嵌套数组子类中获取值?
【发布时间】:2021-12-18 01:03:51
【问题描述】:

我有以下模型从数据库中获取数据:

    public class CultureResource
    {
        public string KeyName { get; set; }
        public List<Resource> Resources { get; set; }
    }

    public class Resource
    {
        public string Value { get; set; }
        public string Culture { get; set; }
    }

现在我的目标是获取keysculture 列表的数据,其中keysCultureResource.KeyName 匹配,cultureResource.Culture 匹配。如何在 IQueryable&lt;CultureResource&gt; 上编写 linq 查询以获得 IList&lt;Result&gt; 的结果,其中 Result 可能如下所示:

public class Result
{
    public string KeyName {get; set;}
    public string Value {get; set;}
}

我尝试了以下 Linq,但它会抛出 $project or $group does not support {document}. 错误:

public IDictionary<string, string> GetLocalizedValueList(string[] keys, string culture)
{
    // returns IQueryable<CultureResource>
    var cultureResources = _repository.GetItems<CultureResource>();     

    /***** This is the query *********/
    var query = from cr in cultureResources
              from r in cr.Resources
              where keys.Contains(cr.KeyName) && r.Culture == culture
              select new { cr.KeyName, r.Value };
              
    var result = query.ToList()
              
    //return some data
}

仅供参考:我的底层数据库是 mongo

【问题讨论】:

    标签: c# .net linq .net-core mongodb-query


    【解决方案1】:

    这个怎么样

            var query = cultureResources.SelectMany(cultureResource => cultureResource.Resources.Select(resource => new { cultureResource.KeyName, resource.Value })).ToList();
    

    【讨论】:

    • 这个不检查文化或键
    • 好的,可以试试这个var query = cultureResources.Where(cultureResource =&gt; keys.Contains(cultureResource.KeyName)) .SelectMany(cultureResource =&gt; cultureResource.Resources.Where(resource=&gt;resource.Culture==culture) .Select(resource =&gt; new { cultureResource.KeyName, resource.Value })).ToList();
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2017-08-11
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多