我是Entity Framework的新手。我想通过ASP.NET MVC项目中的Entity Framework环境归档此查询。
这是我的查询应该执行的内容:
SELECT * FROM Documents
WHERE CREATEDATE IN(
SELECT DISTINCT TOP 2 FORMONTH
FROM DocHistory
WHERE FORMONTH < GETDATE()
ORDER BY FORMONTH DESC
)
我如何在Entity Framework中执行此操作?
var result = from d in Documents
where d.CREATEDATE ???
致以最诚挚的问候,
Veasna
答案 0 :(得分:1)
好的,所以将其分解为两部分。
SELECT DISTINCT TOP 2 FORMONTH
FROM DocHistory
WHERE FORMONTH < GETDATE()
ORDER BY FORMONTH DESC
这变为
DocHistory.Where(dh => dh.FORMONTH < DateTime.Now)
.OrderByDescending(dh => dh.FORMONTH)
.Take(2);
所以我们现在有两个月了
Documents.Where(doc=> DocHistory.Where(dh => dh.FORMONTH < DateTime.Now)
.OrderByDescending(dh => dh.FORMONTH)
.Take(2)
.Select(q => q.FORMONTH)
.Contains(doc.CREATEDATE.Month))
答案 1 :(得分:0)
我会保持简单。首先获取2个日期,然后获取所需的文档。像这样:
var dates = DocHistory.Where(dh => dh.FORMONTH < DateTime.Now).OrderByDescending(FORMONTH).Take(2);
var results = Documents.Where(d => dates.Contains(dates));
答案 2 :(得分:0)
首先,让我们描述内部查询:
DocHistory.Select(dh => dh.FORMONTH)
.Where(dt => dt < DateTime.Now)
.Distinct()
.OrderByDescending()
.Take(2)
然后完整查询将是:
Documents.Where(d => DocHistory.Select(dh => dt.FORMONTH)
.Where(dt => dt < DateTime.Now)
.Distinct()
.OrderByDescending()
.Take(2)
.Contains(d.CREATED));
答案 3 :(得分:0)
您可以执行以下操作
var date = DateTime.Now;
from d in db.Documents
where ( from t in db.DocHistory
where FORMMONTH < date
select FORMMONTH).OrderByDescending()
.Distinct()
.Take(2).Contains(d.CREATEDATE)
select d;
希望这会对你有所帮助