在 Collection 导航 属性 上过滤
Filtering on the Collection Navigation property
我想根据 'Translations' Collection 导航 属性.
过滤我的 'TranslationSet' 实体
例如
如果 'Translation' 的 'LanguageId' 为 5(意大利语),则 'TranslationSet' 包含此 'Translation'应该从结果中删除。
这是我的实体 类:
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; }
}
Here is my attempt
从图中可以看出查询失败,因为存在 LanguageId 为 5 的翻译。
我已经尝试了很多次尝试来解决这个问题,但我什至无法正确关闭 returns 我的查询的 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 会将这两个查询翻译为 WHERE NOT EXISTS
。
我想根据 'Translations' Collection 导航 属性.
过滤我的 'TranslationSet' 实体例如
如果 'Translation' 的 'LanguageId' 为 5(意大利语),则 'TranslationSet' 包含此 'Translation'应该从结果中删除。
这是我的实体 类:
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; }
}
Here is my attempt
从图中可以看出查询失败,因为存在 LanguageId 为 5 的翻译。
我已经尝试了很多次尝试来解决这个问题,但我什至无法正确关闭 returns 我的查询的 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 会将这两个查询翻译为 WHERE NOT EXISTS
。