C# 延迟加载到OrderBy每个成员的条目数

C# 延迟加载到OrderBy每个成员的条目数,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一个实体条目的条目表,其中包含: public virtual Member Member { get; set; } 我有一个实体成员的成员表,其中包括: public virtual ICollection<Entry> Entry { get; set; } 成员不包含FK(是否应该?) 我的目标是根据成员在过去30天内的条目数量对成员列表进行排序。即返回整个成员列表,然后将其从0个条目排序到过去30天内出现的条目数量 我相信我的查询语法是正确的(谢谢@DylanCor

我有一个实体条目的条目表,其中包含:

public virtual Member Member { get; set; }
我有一个实体成员的成员表,其中包括:

public virtual ICollection<Entry> Entry { get; set; }
成员不包含FK(是否应该?)

我的目标是根据成员在过去30天内的条目数量对成员列表进行排序。即返回整个成员列表,然后将其从0个条目排序到过去30天内出现的条目数量

我相信我的查询语法是正确的(谢谢@DylanCorriveau):

var-timeComparison=DateTime.Today.AddDays(-30).Day;

var query=repository.Members.OrderByDescending(p=>p.Entry.Select(e=>e.TimeStamp.Day如果我正确地解释了您的问题,您希望按照
Entry
计数对
Entry
满足您的时间戳标准的给定成员排序,如下所示:

var query = repository.Members
                      .OrderByDescending(m => 
                                         m.Entry
                                          .Where(e =>
                                                 e.TimeStamp.Day <= timeComparison))
                                          .Count());

相关人员:谢谢!这就是答案。我将通过单元测试来完成第二部分,以确保一切都正常工作,但看起来是这样。顺便说一句,我不确定您的日期逻辑是否符合您的要求。我建议更改
Where
子句以不比较
Day
属性的整数值,如这:`Where(e=>e.TimeStamp>=DateTime.Now.AddDays(-30))实际上,假设您只关心日期(2014年12月5日),而不关心条目创建时的确切时间戳,您应该在比较中使用
DateTime
类的
date
属性……我已经更新了我的答案,以包括这一点。这一更改(第一条注释)导致运行时错误(LINQ to Entities无法识别“System.DateTime AddDays(Double)”方法,并且此方法无法转换为存储表达式。)您能否解释这两个命令之间的差异以及您认为我的命令在做什么?(不是争论性的,我不完全确定我自己写的是否正确)谢谢。您更改的答案会导致运行时错误:LINQ to Entities中不支持指定的类型成员“Date”。只支持初始值设定项、实体成员和实体导航属性。
var timeComparison = DateTime.Today.AddDays(-30).Day;
var query = repository.Members.OrderByDescending(p => p.Entry.Select(e => e.TimeStamp.Day <= timeComparison).FirstOrDefault());
var query = repository.Members
                      .OrderByDescending(m => 
                                         m.Entry
                                          .Where(e =>
                                                 e.TimeStamp.Day <= timeComparison))
                                          .Count());
var results = repository.Members
                        .OrderByDescending(m => 
                                           m.Entry
                                            .Where(e =>
                                                   e.TimeStamp.Day <= timeComparison)
                                            .Count())
                        .Select(m => new {
                            MemberId = m.Id,
                            Count = m.Entry.Where(e => 
                                                  e.TimeStamp.Day <= timeComparison)
                                           .Count()
                        });