最好的 linq 查询是什么

发布于 2024-09-26 13:55:14 字数 363 浏览 1 评论 0原文

我有一个日历对象的集合。日历有一个属性Id

IEnumerable<Calendar> CalendarsToView;

我有另一个事件对象集合。事件对象具有 CalendarId 属性,

IEnumerable<CalendarEvent> Events;

我想过滤 Events 集合以仅返回 calendarId 位于 CalendarsToView 集合中的事件。

这样做的最好方法是什么?

I have a collection of Calendar objects. Calendar has a property Id.

IEnumerable<Calendar> CalendarsToView;

I have another collection of Event Objects. Event objects have a property of CalendarId

IEnumerable<CalendarEvent> Events;

i want to filter the Events collection to only return events where the calendarId is in the CalendarsToView collection.

what is the best way of doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

世态炎凉 2024-10-03 13:55:14

加入

var eventsIwant = from e in Events
                  from c in CalendarsToView
                  where c.calendarId =  e.CalendarId
                  select e

do a join

var eventsIwant = from e in Events
                  from c in CalendarsToView
                  where c.calendarId =  e.CalendarId
                  select e
烟雨扶苏 2024-10-03 13:55:14

这需要内部等值连接:

var eventsInCalendar = from e in Events
                       join c in CalendarsToView on e.CalendarId equals c.Id
                       select e;

var distinctEventsInCalendar = eventsInCalendar.Distinct();

这是使用哈希集实现此目的的另一种方法:

var calendarIds = new HashSet<int>(CalendarsToView.Select(c => c.Id));
var distinctEventsInCalendar = Events.Where(e => calendarIds.Contains(e.CalendarId));

This calls for an inner, equijoin:

var eventsInCalendar = from e in Events
                       join c in CalendarsToView on e.CalendarId equals c.Id
                       select e;

var distinctEventsInCalendar = eventsInCalendar.Distinct();

Here's another way of doing it with hash-sets:

var calendarIds = new HashSet<int>(CalendarsToView.Select(c => c.Id));
var distinctEventsInCalendar = Events.Where(e => calendarIds.Contains(e.CalendarId));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文