连接两个对象的实体框架问题

本文关键字:实体 框架 问题 对象 两个 连接 | 更新日期: 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}