这对我来说更像是一个脑筋急转弯,因为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
的形式返回,因为控制器会添加分页功能。
答案 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);