1
응용 프로그램에 대한 채팅을 종료하므로 사용자가 로그인 할 때 모두 '보이지 않는'메시지를 보내야합니다. entityframework를 사용하고 있습니다. 마지막 20 개의 보이지 않는 메시지. 하지만 내 쿼리가 작동하지 않는 경우, 현재 나는이 예외중첩 컬렉션에서 마지막 n 개 요소를 가져 오는 방법
카운트가 DbConstantExpression 또는 DbParameterReferenceExpression 내가 잘못 뭐하는 거지
해야 얻을? 다음과 같이
List<ChatVM> unSeenChats = db.Chats.Where(chat => !chat.Seen)
.Select(chat => new ChatVM
{
Id = chat.Id,
IsAnnonymous = chat.IsAnnonymous,
UserName = chat.UserName,
Messages = chat.Messages
.OrderBy(x => x.DateTime)
.Skip(chat.Messages.Count - 20 > 0
? chat.Messages.Count - 20
: 0)
.Take(20)
.Select(message => new MessageVM
{
Id = message.Id,
DateTime = message.DateTime,
Text = message.Text
}).ToList()
}).ToList();
내 모델
은 다음과 같습니다public class Chat
{
...
public virtual ICollection<Message> Messages { get; set; }
}
public class Message
{
...
public int ChatId { get; set; }
public virtual Chat Chat { get; set; }
}
public class Entities : IdentityDbContext<ApplicationUser>
{
....
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Message>()
.HasRequired(p => p.Chat).WithMany(p => p.Messages).WillCascadeOnDelete(true);
}
}
감사
난 당신이보고있는 따라서 쿼리 (오류 내에서.Count
를 사용할 수 있다고 생각하지 않습니다
아니라,이 작동합니다. 감사. 나는이 "신선한 공기"가 필요했다. –