C# LinQ to Entities:用四个表JOIN查询

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/668821/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 12:36:57  来源:igfitidea点击:

LinQ to Entities: Query with four tables JOIN

c#linq-to-entities

提问by VansFannel

I have four tables:

我有四个表:

- Client with PK ClientID.
- Destination with PK DestinationID.
- Language with PK LanguageID.
- DestinationDetail with PK DestinationID.
- RL-Client-Destination with PKs ClientID and DestinationID.

The Client may have zero or n Destinations. A destination has n DestinationDetails, each of these DestinationDetail has a language.

客户端可能有零个或 n 个目的地。一个目的地有 n 个 DestinationDetails,每个 DestinationDetail 都有一种语言。

Ok. I need to retrieve all of DestinationDetails for a given client and a given language.

好的。我需要检索给定客户端和给定语言的所有 DestinationDetails。

I start writing this:

我开始写这个:

try
   {
      ObjectQuery clientes = 
          guiaContext.Cliente;
      ObjectQuery destinos =
          guiaContext.Destino;
      ObjectQuery idiomas =
          guiaContext.Idioma;
      ObjectQuery detalles =
          guiaContext.DetalleDestino;

      IQueryable detalleQuery =
          from cliente in clientes
          from destino in destinos
          from idioma in idiomas
          from detalleDestino in detalles
          where destino.
          select detalleDestino;

   }
   catch
   {
   }
}

Any advice?

有什么建议吗?

Thanks!

谢谢!

采纳答案by eglasius

Its along the lines:

它的思路是:

var detalleQuery =
          from client in guiaContext.Clients
          where client.ID == 1
          from destination in cliente.Destinations
          from destinationDetail in destination.DestionationDetails
          where destinationDetail.Language.Iso2Code == "es"
          select destinationDetail;

回答by Jonathan Parker

Have you tried doing linq joins:

你有没有试过做 linq 连接:

Select from multiple table using LINQ

使用 LINQ 从多个表中选择

回答by VansFannel

My answer:

我的答案:


var db = new PracticeEntities();
            var destinations = db.DestinationDetails.
                Where(dd => dd.Language.Lang == "en-US" &&
                dd.Destination.Client.Any(c => c.Email == "[email protected]"));


Thanks!

谢谢!