【问题标题】:Refine Search and return List优化搜索并返回列表
【发布时间】:2013-04-25 10:09:15
【问题描述】:

我正在使用一个函数来排序并返回一个列表。

return Snacks;

在返回列表之前,我想执行一个额外的选择。仅选择具有特定日期的记录,例如。 2013 年 3 月 25 日。 因此,列表返回 5 条记录。通过将其缩小到仅选择 2013 年 3 月 25 日。我将获得我需要的唯一 3 条记录。

我想用来细化搜索的记录列是“ActivityDate”,那么我该如何缩小范围?

是不是有点像

    Snacks.SelectMany(//add date);

    Snacks.Select(where activityDate = ??);
    return Snacks;

P.S 我意识到还有其他方法可以做到这一点,我可能应该在函数的初始搜索中执行此操作,但我需要在返回列表之前执行此操作。所以任何建议将不胜感激,谢谢

编辑 感谢大家的回复,但我不想在列表中添加更多记录。我已经有 5 条记录在列表中,我现在要减少到 3 条。通过这样做,我只想选择列表中日期 == filterDate 的记录。

当我尝试您在 .ToList 上的尝试时,他们都添加了我需要的 3 条记录,但其他 2 条记录已经存在于之前的搜索中。

【问题讨论】:

  • 记录中的日期是否包括时间?我们可以只处理没有时间的日期吗?还是我们只需要保留日期时间在 3 月 25 日午夜之前的记录?
  • 时间包含在日期中,但它们都是 00:00:00

标签: c# asp.net .net linq asp.net-mvc-3


【解决方案1】:

更新:为了回应 juharr 的评论并促进为 SO 提供精彩内容,让我更新我的答案。

可以使用where 方法过滤集合。 Where 方法是位于 System.Linq 命名空间中的扩展方法,因此请确保将其包含在代码文件中,并在下面放置建议的代码(例如,执行 using System.Linq;)。

您可以将过滤后的集合分配给变量或直接返回。

var filteredSnacks = Snacks.Where(x=>x.ActivityDate == filterDate).ToList();
return filteredSnacks;
// or simple do a 
return Snacks.Where(x=>x.ActivityDate == filterDate).ToList();

【讨论】:

  • where 方法不会将元素添加到您的集合中,而是将它们取出。所以我不确定你更新后的问题是什么意思。
  • 这行代码具有误导性。您应该将其分配给一个变量(可能是Snacks)或返回它。否则,它给人的印象是它将过滤原始列表,但它不会。
  • 当 OP 知道如何处理 Snacks 时,为什么会产生误导? OP 可以先将其分配给一个变量,然后将该变量返回给视图、另一个调用方法或其他任何东西,或者直接返回它。
【解决方案2】:

难道不是这么简单:

return Snacks.Where(s => s.ActivityDate == DateTime.Now).ToList();

(例如)?

【讨论】:

  • Where 不会向您当前的收藏添加任何内容,因此有人误解了某些内容(即我们误解了您的要求或您误解了解决方案)。你能发布你现在拥有的代码吗?
【解决方案3】:

只需使用Where:

var snacks = Snacks.Where(s => s.ActivityDate == "25/03/2013").ToList();
return snacks;

或者

DateTime date = new DateTime(2013, 03, 25);
var snacks = Snacks.Where(s => s.ActivityDate == date).ToList();
return snacks;

【讨论】:

  • @John - 在哪里应用过滤器。它将采用Snacks 集合并仅返回谓词为真的结果(ActivityDate 等于 25/03/2013)
【解决方案4】:

这里是声明

var result = list.Where(item => item.Date.Equals(yourdatevalue))

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多