我有一个linq查询
var tListOfDates = tList.GroupBy(g => g.dateOfSlot)
.Select(s => new {s.Key.Value });
dateOfSlot
是一个DateTime
值
如何将tListOfDates
转换为IEnumerable<DateTime>
我已经尝试过对结果进行强制转换,但这是行不通的。
答案 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.Key
是DateTime
。问题是Datetime
没有属性Value
。您确定DateOfSlot
是DateTime
吗?
不确定您想要什么。
我在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