您在查詢中有這樣和我假定這是一個錯字:a.RECID = x.CUSTPACKINGSLIPJOUR
因爲CUSTPACKINGSLIPJOUR
是集名稱。因此,我用SomeId
代替。但是這應該給你的想法:
在投影中做一個子查詢。您還需要通過降序進行訂購,然後獲取第一條記錄 - 這將與top 1
類似。下面是該查詢:
var query = from a in CUSTPACKINGSLIPJOUR
join c in CUSTPACKINGSLIPTRANS on a.PACKINGSLIPID equals c.PACKINGSLIPID
select new
{
VerID = (from x in CUSTPACKINGSLIPVERSION
where a.RECID == x.SomeId select x)
.OrderByDescending(o => o.VERSIONDATETIME)
.First().INTERNALPACKINGSLIPID,
c.LINENUM,
c.RECID
};
您可以通過以下集合測試:
var CUSTPACKINGSLIPJOUR = new List<CUSTPACKINGSLIPJOUR> { new CUSTPACKINGSLIPJOUR { PACKINGSLIPID = 1, RECID = 1 },
new CUSTPACKINGSLIPJOUR { PACKINGSLIPID = 2, RECID = 2 }};
var CUSTPACKINGSLIPTRANS = new List<CUSTPACKINGSLIPTRANS>
{
new CUSTPACKINGSLIPTRANS { LINENUM = 1, RECID = 1, PACKINGSLIPID = 1 }
};
var CUSTPACKINGSLIPVERSION = new List<CUSTPACKINGSLIPVERSION>
{
new CUSTPACKINGSLIPVERSION { INTERNALPACKINGSLIPID = 1, SomeId = 1, VERSIONDATETIME = DateTime.Today.AddDays(-1) },
new CUSTPACKINGSLIPVERSION { INTERNALPACKINGSLIPID = 2, SomeId = 1, VERSIONDATETIME = DateTime.Today }
};
這將是相同的查詢,如果您使用的是DbSet<T>
。
我不知道如果我誤解你的查詢:返回'linenum'&'recid'的第一條記錄,但是OP在'SELECT'中有'*',表示他想要選擇所有'CUSTPACKINGSLIPJOUR'列,然後返回所有'LINENUM' +'RECID',並且只返回' INTERNALPACKINGSLIPID'。 –
在這種情況下,我無法說出*的含義。它可能是一個屬性或100個屬性。原來選擇的前1次,再次我不能說這是一行還是多行。我盡我所能地發佈了大量的信息。 – jdweng
我修改了代碼以按日期分組,以便獲取最新日期的所有行。 – jdweng