检查项目是否存在并在匿名类型上使用 .Contains() 返回匹配的元素
我有一个日期集合(可能重复),需要使用 .Contains()
或类似方法进行检查。
我创建一个像这样的匿名类型:
var bookedDates = (from b in db.Bookings
where b.BookingDate > DateTime.Today
select new
{
Date = b.BookingDate,
StatusID = b.StatusId
});
然后我有一个日期集合 (d)
,并且我需要测试 d
是否存在于我的匿名类型中。使用字典这会很容易,因为我可以使用 .ContainsKey()
。
如果匿名类型中存在日期,我需要获取与我正在测试的日期相对应的一个或多个项目。
有没有一种快速的方法可以做到这一点,我知道我可以通过循环和测试每个键来做到这一点,但寻找更快/更有效的方法。
本质上,我正在寻找一个支持重复项目的字典。
I have a collection of dates (possibly duplicates) that I need to check against using .Contains()
or a similar method.
I create an anonymous type like this:
var bookedDates = (from b in db.Bookings
where b.BookingDate > DateTime.Today
select new
{
Date = b.BookingDate,
StatusID = b.StatusId
});
I then have a collection of dates (d)
, and I need to test whether d
exists within my anonymous type. This would be easy using a dictionary since I can use the .ContainsKey()
.
If a date exists within the anonymous type, I need to get the one or multiple items that correspond to the date I'm testing.
Is there a quick way to do this, I know I can do it by looping and testing each and every key but looking for a faster/more efficient way.
In essence, I'm looking for a dictionary that supports duplicate items.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您只想检查是否已有日期,可以使用 HashSet,然后检查以下查询中的哈希集等:
编辑:
我认为您只想根据查询中的项目进行查找:
查找允许集合每个键的项目数,所以这可能就是您正在寻找的。
然后你就可以像这样使用它:
If you just want to check whether you have the date already you can use a HashSet, then check the hashset in the following queries etc.:
Edit:
I think you just want a lookup based on the items in your query:
A lookup allows a collection of items for each key, so that might be what you are looking for.
Then you can just use it like this:
var uniqueNames = bookingDates.Distinct();
var distinctNames = bookedDates.Distinct();
也许我弄错了,但您可以在
bookedDates
上应用另一个 LINQ 查询,如下所示:编辑:如果搜索日期来自同一数据库,则join 将是一个选项
(假设要比较的日期位于
db.SearchDates
中,如有必要,添加where days > DateTime.Now
代码>或其他日期限制)Maybe I'm getting it wrong, but you can apply another LINQ query on your
bookedDates
, something like this:edit: if the search dates are from the same database then a join would be an option
(assuming that the dates to compare are located in
db.SearchDates
, if necessary, add awhere dates > DateTime.Now
or other restrictions on the dates)这应该为您提供一个类型为 DateTime、StatusID 类型的 IGrouping 的 IEnumerable
This should give you an IEnumerable of type IGrouping of type DateTime, StatusID type