连接两个对象的实体框架问题
本文关键字:实体 框架 问题 对象 两个 连接 | 更新日期: 2023-09-27 18:11:34
我有以下对象:
public class City
{
public int CityId { get; set; }
public string Name { get; set; }
public virtual ICollection<CityTranslation> CityTranslations { get; set; }
}
public class CityTranslation
{
public int CityId { get; set; }
public string LanguageCode { get; set; }
public string Translation { get; set; }
public virtual City City { get; set; }
}
城市表在Name字段中包含默认语言值,其他翻译在CityTranslation表中。
我有问题,以获得价值的语言从这个。
我正在尝试执行以下命令:
public virtual IEnumerable<City> GetAllByLanguage(string language)
{
if (language != "en")
{
var data = from c in context.Cities
join t in context.CityTranslations
on c.CityId equals t.CityId
&& t.LanguageCode == language
select c;
}
else
{
return dbSet.ToList();
}
}
操作符'&&'不能用于'int'和'bool'类型的操作数
加上一些类型转换错误。
我该怎么做才能从翻译表中获得价值?
其他人已经发现了这个问题,但你甚至不应该需要连接- EF将处理它:
var data = from t in context.CityTranslations
where t.LanguageCode == language
select t.City;
第二个谓词不应该是join的一部分:
var data = from c in context.Cities
join t in context.CityTranslations
on c.CityId equals t.CityId
where t.LanguageCode == language
对于多个值的连接,您需要使用匿名类型创建组合键,因此您的连接语句需要类似于
on new {t.CityId, t.languageCode} equals new {c.CityId, language}