我有以下对象:
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; }
}
城市表在名称字段中包含默认语言值其他翻译在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();
}
}
但我收到编译错误。
运营商&amp;&amp;&amp;&#39;不能应用于&#39; int&#39;类型的操作数和&#39; bool&#39;
加上一些施法错误。
我该怎么做才能从翻译表中获取价值?
答案 0 :(得分:2)
其他人已经发现了这个问题,但你甚至不需要加入 - EF会处理它:
var data = from t in context.CityTranslations
where t.LanguageCode == language
select t.City;
答案 1 :(得分:1)
对于多个值的连接,您需要使用匿名类型创建组合键,因此您的连接语句需要类似
on new {t.CityId, t.languageCode} equals new {c.CityId, language}
答案 2 :(得分:1)
第二个谓词不应该是加入的一部分:
var data = from c in context.Cities
join t in context.CityTranslations
on c.CityId equals t.CityId
where t.LanguageCode == language