实体框架:连接两个表和 where 子句

时间:2021-05-14 12:56:22

标签: c# postgresql entity-framework .net-core entity-framework-core

我在使用 Entity Framework 和 PostgreSQL 时遇到问题,有人知道如何连接两个表并将第二个表用作 where 子句吗?

我想在实体框架中做的选择是在 SQL 中:

SELECT ai.id, ai.title, ai.description, ai.coverimageurl 
FROM app_information ai 
INNER JOIN app_languages al on al.id = ai.languageid
WHERE al.languagecode = 'es'

目前我有这个

appInformationToReturn = context.app_information
                                .Join(context.app_language, ai => ai.languageid, 
                                      al => al.id, (ai, al) => new AppInformation()
                                                                   {
                                                                        id = ai.id,
                                                                        title = ai.title,
                                                                        description = ai.description,
                                                                        coverimageurl = ai.coverimageurl
                                                                   })
                                .Where()
                                .FirstOrDefault();

我不知道如何构建 where 子句。

2 个答案:

答案 0 :(得分:2)

像这样:

appInformationToReturn = context.app_information
        .Join(context.app_language, ai => ai.languageid, 
              al => al.id, (ai, al) => new 
              {
                  id = ai.id,
                  title = ai.title,
                  description = ai.description,
                  coverimageurl = ai.coverimageurl,
                  lang = al.languagecode
              }).Where(x=>x.lang == "es")
                .Select(x=> new AppInformation()
                        {
                            id = x.id,
                            title = x.title,
                            description = x.description,
                            coverimageurl = x.coverimageurl
                        })
        .FirstOrDefault();

答案 1 :(得分:0)

试试这个:

var item = (
    from ai in context.app_information
    join al in context.app_language on ai.languageid equals al.id 
    where (al.languagecode == "es")
    select new AppInformation 
    {
        id = ai.id,
        title = ai.title,
        description = ai.description,
        coverimageurl = ai.coverimageurl
    }).FirstOrDefault();

或尝试更短的

var item = context.app_information
    .Where(ai => ai.app_language.languagecode == "es")
    .Select(ai => new AppInformation 
    {
        id = ai.id,
        title = ai.title,
        description = ai.description,
        coverimageurl = ai.coverimageurl
    })
    .FirstOrDefault();