获取此结果列表
Date | YESorNO
---------------------
01/01/2001 | NO
01/01/2002 | NO
01/01/2003 | YES
01/01/2004 | NO
01/01/2005 | NO
01/01/2006 | NO
01/01/2007 | YES
01/01/2008 | YES
01/01/2009 | YES
列表是有序的,除了降序/升序之外,我无法对其进行排序。
我希望能够在所有'NO'被记录之后返回第一个'YES'。
在上面的例子中,第7行是我要返回的记录(2007年1月1日)
我的代码如下
var query =
(
from m in db.MyTable
where m.Criteria == XYZ
select new
{
Date = m.Date,
YESorNO = m.YESorNO
}
).OrderBy(x => x.Date);
使用.FirstOrDefault(x => x.YesOrNO == "YES")
返回第3条记录。
感谢您的帮助。
答案 0 :(得分:5)
您可以通过下订单来完成此操作并获取第一组" YES"的最后一个元素:
var query =
(
from m in db.MyTable
where m.Criteria == XYZ
select new
{
Date = m.Date,
YESorNO = m.YESorNO
}
).OrderByDescending(x => x.Date);
var result = query.AsEnumerable()
.TakeWhile(x => x.YESorNO == "YES")
.LastOrDefault();
我在这里使用AsEnumerable()
,因为我不确定哪些运算符可以转换为SQL,TakeWhile
肯定不会。
如果没有"是"在最新的" NO"之后,这将返回null
。
答案 1 :(得分:0)
var query = db.MyTable
.Where(m.Criteria == XYZ)
.Select(e => new { Date = e.Date, YESorNO = e.YESorNO })
.OrderBy(e => x.Date);
var latestNODate = query.Where(ee => ee.YESorNO == "NO").Last().Date;
var element = query.Where(e => e.Date > latestNODate && e.YESorNO == "YES").FirstOrDefault();