使用linq在子列表中对具有条件的元素进行计数

时间:2019-07-06 11:46:53

标签: c# asp.net linq

我试图从本身具有列表的对象列表中获取一些值,但是我正努力使用Linq查询来实现这一点。我想向用户显示他们未响应的事件数量。

我有一个事件列表,每个事件都有一个EventUsers列表,这些EventUsers有一个布尔HasResponded和一个UserId。我想检索某个用户尚未响应的事件数量。

为简单起见,我省略了Linq查询中不需要的对象的属性。

事件类:

    public class Event
    {
        public List<EventUser> EventUsers { get; set; }
    }

EventUser类:

    public class EventUser
    {
        public int EventId { get; set; }
        public Event Event { get; set; }
        public long UserId { get; set; }
        public User User { get; set; }

        public bool HasResponded { get; set; }
    }

我的linq查询应该看起来像这样,但我无法使其正常工作:

_eventManager.QueryEvents().Where(x => x.StartTime > DateTime.Today && x.EventUsers.Select(z => z.UserId == userId && z.HasResponded)).Count()

我将如何创建此Linq查询?任何帮助深表感谢!

2 个答案:

答案 0 :(得分:2)

_eventManager.QueryEvents().Where(x => x.StartTime > DateTime.Today)
                           .SelectMany(x => x.EventUsers)
                           .Count(z => z.UserId == userId && !z.HasResponded)

答案 1 :(得分:0)

需要使用SelectMany:

if ($request->hasfile('profilePhoto')) {
        $this->validate($request, [
              'profilePhoto' => 'required',
              'profilePhoto.*' => 'mimetypes:image/jpg'
        ]);
        $image = $request->file('profilePhoto');
        $extension = strtolower($image->getClientOriginalExtension());
        $path = storage_path('app/public/upload/images/UserImage');
        $uniqueName = md5($image . time());
        $image->move(public_path($path), $uniqueName . '.' . $extension);
 }