gpt4 book ai didi

c# - 如何使用 LINQ to Entities 仅包含一些内部列表项

转载 作者:行者123 更新时间:2023-11-30 17:38:54 25 4
gpt4 key购买 nike

我有以下实体(为便于阅读而简化):

public class Country
{
public List<NameLocalized> Names;
}

public class NameLocalized
{
public string Locale;
public string Value;
}

我还有一个 DbSet<Country> Countries在我的上下文中。如何编写一个 LINQ 查询,它将返回国家列表但具有过滤名称(因此 Names 列表将仅包含基于指定语言环境的单个项目。类似这样的东西(但是,这不是一个工作示例)

public List<Country> GetCountries(string locale)
{
var result = context.Countries.Include(c => c.Names.Select(n => n.Locale == locale)).ToList();
return result;
}

如果不可能一步实现,如何分两步实现

public List<Country> GetCountries(string locale)
{
//I have to use Include for eager loading
var tempResult = context.Countries.Include(c => c.Names);

var result = //Some code to convert tempResult to result, where only interesting locale is included
return result;
}

我正在尝试按照代码删除不需要的项目,但它也不起作用

result.ForEach(c => c.Names.ToList().RemoveAll(n => n.Locale != locale)); 

更新:我已经设法使用以下代码删除项目(使用扩展方法)

public static void RemoveAll<T>(this ICollection<T> collection,Predicate<T> predicate) 
{
if (predicate == null)
{
throw new ArgumentNullException("predicate");
}
collection.Where(entity => predicate(entity))
.ToList().ForEach(entity => collection.Remove(entity));
}


result.ForEach(c => c.Names.RemoveAll(n => n.Locale != locale));

更新 2:

在答案和评论的帮助下,我得以成功。详情在Convert Entity with navigation property to DTO using IQueryable

最佳答案

由于您的模型将 Country 定义为具有多个 Names 的东西,因此如果 Country 实例仅具有以下之一,可能会造成混淆它的名称。相反,创建一个单独的类型来表示关于给定语言环境的 Country 的已知信息的概念。

public class LocaleCountry
{
public int CountryId {get;set;}
public string Name {get;set;}
public string Locale {get;set;}
}


public List<LocaleCountry> GetCountries(string locale)
{
var result = context.Countries
.Select(c => new LocaleCountry
{
CountryId = c.Id,
Name = c.Names
.Where(n => n.Locale == locale)
.Select(n => n.Name)),
Locale = locale
})
.ToList();
return result;
}

关于c# - 如何使用 LINQ to Entities 仅包含一些内部列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com