私はC#でプロジェクトのようなウェブメールをやっています。私はMultiSelectListを持っていますが、ログインしているユーザーがメンバーになっているすべてのグループを選択しようとしているため、ユーザーはこれらを選択してメッセージを送信できますが、ユーザーはグループではない一部の。MultiSelectListのC#.NETクエリが機能しません。
public class Group
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<UserGroup> Users { get; set; }
}
public class ApplicationUser : IdentityUser
{
public DateTime LastLoggedIn { get; set; }
public int DeletedMessages { get; set; }
public int LoginCount { get; set; }
public virtual ICollection<UserGroup> Groups { get; set; }
}
public class UserGroup
{
[Key, ForeignKey("User")]
public string UserId { get; set; }
[Key, ForeignKey("Group")]
public int GroupId { get; set; }
public virtual ApplicationUser User { get; set; }
public virtual Group Group { get; set; }
}
そして、これは、クエリでMultiSelectListです:
これらは私のモデルです
ViewData["ToGroupName"] = new MultiSelectList(_context.Group.Where(group =>
group.Users.Where(user => user.UserId.Contains(currentUserID))
.Select(s => s.GroupId).FirstOrDefault() == group.ID), "ID", "Name");
私は、データベースから項目を選択する> DbSets <でApplicationDbContextを使用しています。私が理解できないことは、ユーザーの一部であるすべてのグループを取得するために、コードの別の部分でこの全く同じクエリを使用することですが、何らかの理由でここでは機能しません。代わりに、メンバーであるかどうかに関係なく、データベースにあるすべてのグループが選択されます。
私は私が得ることができる任意の助けに感謝:)
'Contains()は複数のユーザーIDを返している可能性があります。ユーザーIDが文字列であるため、ユーザー "100"を探して "98100"、 "51009"などを返します。次に、この 'FirstOrDefault()'がそれらの1つを取得しています。 Equalsまたは==の使用を検討してください。 – derloopkat
私は実際にこれが当てはまるかもしれませんが、悲しいことに何も変わっていませんでした:( 提案に感謝!D – DarkCatapulter