LINQ .Take() after .Distinct() issue



我正在使用LINQ进行数据库查询,代码如下:

var dateList =
            Table1.Where(t1 => t1.column1.Contains(stringUsed)) //stringUsed is a parameter of the method containing this code
                .Join(Table2, t1 => t1.columnName2, t2 => t2.columnName2,
                    (t1, t2) => new {t1, t2})
                .Join(Table3, t1t2 => t1t2.t1.column3, t3 => t3.column3,
                    (t1t2, t3) => new {Date = t3.column4})
                .Select(d => d.Date.Value) //Dates are stored as a DateTime? and I need to convert it to DateTime here
                .Distinct()
                .ToList();

最终结果是一个包含2000多个唯一日期的列表(都很好)。根据用户需求,我只需要收集查询将创建的最近90条记录的日期(数据已经在数据库中排序了,所以这里不需要这样做)。

当我试图在.Distinct().ToList()之间插入.Take(90)时,我的问题出现了。结果是一个只有13条记录的列表。我搜索了这里和其他地方,看看是否有人有这个问题,并没有能够找到任何东西。什么好主意吗?

感谢@usr的帮助。下面的代码将根据需要取出90条记录:

var dateList =
            Table1.Where(t1 => t1.column1.Contains(stringUsed)) //stringUsed is a parameter of the method containing this code
                .Join(Table2, t1 => t1.columnName2, t2 => t2.columnName2,
                    (t1, t2) => new {t1, t2})
                .Join(Table3, t1t2 => t1t2.t1.column3, t3 => t3.column3,
                    (t1t2, t3) => new {Date = t3.column4})
                .Select(d => d.Date.Value) //Dates are stored as a DateTime? and I need to convert it to DateTime here
                .Distinct()
                .OrderByDescending(d => d)
                .Take(90)
                .ToList();

显然添加.OrderBy()是需要做的。谢谢所有人。

相关内容

  • 没有找到相关文章

最新更新