【发布时间】:2016-06-24 20:27:02
【问题描述】:
所以我正在使用 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 条记录的列表。我在这里和其他地方搜索,看看是否有其他人遇到过这个问题,但找不到任何东西。有什么想法吗?
【问题讨论】:
-
什么是
Table1?你在使用实体框架吗?如果有,是哪个数据库提供商? -
是的,使用实体框架。 Table1 是我的 Oracle 数据库中的一个表。清理了代码,但试图让发生的事情保持明显......我猜我失败了。
-
你能不能连接一个调试器,得到
.Distinct().Take(90).ToString()的值?那应该生成一个包含生成的 sql 查询的字符串。如果您可以将其添加到问题中,那将有所帮助。 -
.Distinct().Take(90)呢? -
@recursive 当我调试时,当我在
.Distinct()和.ToList()之间添加.Take(90)时,dataList显示计数为 13。如果不添加.Take(90),dataList显示的计数大约为 2000。