正在筛选"集合导航"属性



我想根据"Translations"集合导航属性筛选我的"TranslationSet"实体。

例如

如果"Translation"的"LanguageId"为5(意大利语(,则应从结果中删除包含此"Translation"的"TranslationSet"。

以下是我的实体类:

public class Language
{
public int LanguageId { get; set; }
public string NationalLanguage { get; set; }
//Make table multi tenanted.
public int TenantId { get; set; }
public ApplicationTenant Tenant { get; set; }
public List<Translation> Translation { get; set; } = new List<Translation>();
}
public class Translation
{
public int TranslationId { get; set; }
public string TranslatedText { get; set; }
public int LanguageId { get; set; }
public Language Language { get; set; }
//Make table multi tenanted.
public int TenantId { get; set; }
public ApplicationTenant Tenant { get; set; }

public int TranslationSetId { get; set; }
public TranslationSet TranslationSet {get; set;}
}
public class TranslationSet
{
public int TranslationSetId { get; set; }
public int TenantId { get; set; }
public ApplicationTenant Tenant { get; set; } 
public IEnumerable<Translation> Translations { get; set; }
}

这是我的尝试

从图中可以看出,查询失败是因为存在LanguageId为5的翻译。

我已经尝试了很多次来解决这个问题,但我甚至无法关闭正确返回查询的LINQ。

如果需要进一步澄清,请告诉我,并提前感谢任何提供帮助的人。

我的经验法则是:从查询您想要的实体开始。这将防止您在查询结果中看到的重复。然后使用导航属性添加谓词来过滤实体。这将是:

var sets = TranslationSets // start the query here
.Where(ts => ts.Translations.All(t => t.LanguageId != 5)); // Filter

或者如果你更喜欢这个:

var sets = TranslationSets // start the query here
.Where(ts => !ts.Translations.Any(t => t.LanguageId == 5)); // Filter

EF将两个查询都翻译为CCD_ 1。

相关内容

  • 没有找到相关文章

最新更新