如何将此linqTOsql查询转换为lambda

时间:2011-01-26 16:51:21

标签: c# linq linq-to-sql

这对我来说更像是一个脑筋急转弯,因为linqTOsql查询满足了这个需求。我只是想知道如何将这样的查询转换为lambda,或者甚至是可能的。

我原本试图用lambdas来实现这一点,但是我能弄清楚如何完成连接的唯一方法就是使用查询语法来正确排序结果:

        var entries = from e2c in entry2CatsTable
                      join sEntries in streamEntryTable
                      on e2c.streamEntryID equals sEntries.seID
                      orderby sEntries.seDateCreated descending
                      orderby e2c.e2cOrder
                      where e2c.catID == catID
                      select sEntries;

我使用lambdas玩过这个,这就是我得到了多远:

        IQueryable<Entry2Cats> e2c = entry2CatsTable
                                        .Where(x => x.catID == catID)
                                        .OrderBy(x => x.e2cOrder);
        IQueryable<StreamEntry> entries = e2c.SelectMany(x => x.StreamEntry);

这些lambda会返回正确的结果,但我无法正确排序,因为我需要根据Entry2Cats表和StreamEntry表中的字段进行排序。因为这是一个很多甚至许多这样的声明不起作用:

// doesn't work because it doesn't know which x.Entry2Cats.e2cOrder to use
entries.OrderByDescending(x => x.seDateCreated).OrderBy(x => x.Entry2Cats.e2cOrder);

有什么想法吗?

注意:

此外,结果需要以IQueryable的形式返回,因为控制器会添加分页功能。

1 个答案:

答案 0 :(得分:2)

var entries = entry2CatsTable
                .Join(streamEntryTable, e2c => e2c.streamEntryID, sEntries => sEntries.seID, (e2c, sEntries) => new { e2c, sEntries })
                .Where(item => item.e2c.catID == catID)
                .OrderByDescending(item => item.sEntries.seDateCreated)
                .ThenBy(item => item.e2c.e2cOrder)
                .Select(item => item.sEntries);