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

时间:2014-07-06 15:43:03

标签: c# entity-framework entity-framework-6

我有以下对象:

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;

加上一些施法错误。
我该怎么做才能从翻译表中获取价值?

3 个答案:

答案 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