如何使用 linq 从父类和嵌套数组子类中获取值?
Posted
技术标签:
【中文标题】如何使用 linq 从父类和嵌套数组子类中获取值?【英文标题】:How to get value from a parent class and a nested array child using 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;
现在我的目标是获取keys
和culture
列表的数据,其中keys
与CultureResource.KeyName
匹配,culture
与Resource.Culture
匹配。如何在 IQueryable<CultureResource>
上编写 linq 查询以获得 IList<Result>
的结果,其中 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
【问题讨论】:
【参考方案1】:这个怎么样
var query = cultureResources.SelectMany(cultureResource => cultureResource.Resources.Select(resource => new cultureResource.KeyName, resource.Value )).ToList();
【讨论】:
这个不检查文化或键 好的,可以试试这个var query = cultureResources.Where(cultureResource => keys.Contains(cultureResource.KeyName)) .SelectMany(cultureResource => cultureResource.Resources.Where(resource=>resource.Culture==culture) .Select(resource => new cultureResource.KeyName, resource.Value )).ToList();
以上是关于如何使用 linq 从父类和嵌套数组子类中获取值?的主要内容,如果未能解决你的问题,请参考以下文章