【问题标题】:How to use a JOIN in a LINQ query如何在 LINQ 查询中使用 JOIN
【发布时间】:2010-02-25 05:41:11
【问题描述】:

我有以下表结构,它被导入到实体框架项目中: (注意:我在 Table1 中将 T1Name 误标记为 T2Name)

alt text http://digitalsamurai.us/images/drawing2.png

我已经标记了实体对象。多对多联合表Table5,在Entity3中表示为EntityCollection,在Entity4中表示为EntityCollection(EntityCollection实现IEnumerable,所以可以查询)。我需要构造一个结果集:

T1Name、T2Name、T3Name

这将导致 T1Name 和 T2Name 重复条目。

有人可以告诉我如何编写这个 LINQ 查询吗?

感谢您的帮助。

【问题讨论】:

    标签: linq entity-framework linq-to-entities


    【解决方案1】:
    var q = from e3 in Context.Table3
            from e4 in e3.Table4s     // that's your many-to-many
            select new
            {
                Name3 = e3.T3Name,
                Name2 = e4.Table2.T2Name,
                Name1 = e4.Table1.T1Name // presuming Table1.T2Name in your diagram is a typo
            };
    

    “点符号”:

    var q = Context.Table3
                   .SelectMany(e3 => e3.Select(e4 => 
                                                   new {
                                                       Name3 = e3.T3Name,
                                                       Name2 = e4.Table2.T2Name,
                                                       Name1 = e4.Table1.T1Name
                                                   });
    

    请注意,我根本没有使用 join。这是故意的; you don't need it here.

    【讨论】:

    • 你知道用点表示法会翻译成什么吗?
    • 你能澄清一下这个问题吗?我不确定你在问什么。
    • 我知道你上面使用的查询符号被翻译成这样的形式:List.Where(x => x.????).Select(y => y).etc...我想知道您是否知道您的查询是如何翻译的。只是因为我想更好地理解 LINQ。谢谢。
    • 谢谢克雷格。像往常一样很好的答案。
    • 顺便说一句,LINQPad 会为您将任何查询转换成这种表示法,并且可以使用您的 EF 模型。
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多