转换为LINQ查询的IEnumerable <datetime>结果

时间:2018-08-12 19:20:42

标签: c# linq

我有一个linq查询

var tListOfDates = tList.GroupBy(g => g.dateOfSlot)
                        .Select(s => new {s.Key.Value });

dateOfSlot是一个DateTime

如何将tListOfDates转换为IEnumerable<DateTime>

我已经尝试过对结果进行强制转换,但这是行不通的。

4 个答案:

答案 0 :(得分:2)

您应该删除匿名类 new {s.Key.Value }(您不想这样做,但DateTime):

 var tListOfDates = tList 
   .GroupBy(g => g.dateOfSlot)
   .Select(s => s.Key.Value);

似乎dateOfSlot的类型为DateTime?,而不是DateTime,因为您放置的是s.Key.Value,而不是s.Key;如果我的猜测是正确的,可以将其表示为

  var tListOfDates = tList 
    .Where(item => item.dateOfSlot.HasValue)
    .Select(item => item.dateOfSlot.Value)
    .Distinct();

答案 1 :(得分:1)

一个命题,您可以获取所有日期并通过Distinct获得唯一的日期

var tListOfDates = tList.Select(g => g.dateOfSlot).Distinct();

答案 2 :(得分:0)

我解决了

IEnumerable<DateTime> tListOfDates = tList.Where(w => w.dateOfSlot.HasValue).Select(g => g.dateOfSlot).Distinct().ToArray().Cast<DateTime>();

可能还有其他需要,并且查询可以简化。

答案 3 :(得分:0)

因此,您有一个对象tlist,该对象实现了IEnumerable<MySlot>。我们不了解很多MySlot,但是我们知道每个MySlot对象都有一个DateTime属性DateOfSlot

LINQ语句的第一部分将MySlots中的所有tlist分组为MySlots的组,其中该组中的每个MySlot都等于DateOfSlot

tList.GroupBy(mySlot => mySlot.dateOfSlot)

每个组都有一个Key,其中包含此公共DateOfSlot。因此Key是d DateTime个对象

第二部分将每个组投影到一个元素中:

    .Select(group => new {group.Key.Value });

group.KeyDateTime。问题是Datetime没有属性Value。您确定DateOfSlotDateTime吗?

不确定您想要什么。

我在IEnumerable<MySlot>中有一个tList,并且我希望此列表中所有使用过的DateOfSlot

var allUsedDateOfSlotValues = tList.Select(mySlot => mySlot.DateOfSlot);

但是现在我有重复项,我不想重复!

var allDistinctUsedDateOfSlotValues = tList
     .Select(mySlot => mySlot.DateOfSlot)
     .Distinct();

这将与您的代码产生相同的结果:

var result = tList.GroupBy(mySlot => mySlot.DateOfSlot)
    // result: groups of mySlots with same DateOfSlot
    .Select(group => group.Key)
    // result: distinct values of DateOfSlot