2017-10-16 4 views
2

私は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を使用しています。私が理解できないことは、ユーザーの一部であるすべてのグループを取得するために、コードの別の部分でこの全く同じクエリを使用することですが、何らかの理由でここでは機能しません。代わりに、メンバーであるかどうかに関係なく、データベースにあるすべてのグループが選択されます。

私は私が得ることができる任意の助けに感謝:)

+0

'Contains()は複数のユーザーIDを返している可能性があります。ユーザーIDが文字列であるため、ユーザー "100"を探して "98100"、 "51009"などを返します。次に、この 'FirstOrDefault()'がそれらの1つを取得しています。 Equalsまたは==の使用を検討してください。 – derloopkat

+0

私は実際にこれが当てはまるかもしれませんが、悲しいことに何も変わっていませんでした:( 提案に感謝!D – DarkCatapulter

答えて

1
あなただけのグループは、現在のユーザーIDに一致するすべてのユーザーIDを持っているかどうかを確認します。..あまりやるしようとしているように見える

..

コレクション内の任意の項目は、あなたの基準を満たしている場合

あなたがANY

ViewData["ToGroupName"] = new MultiSelectList(_context.Group.Where(group => 
    group.Users.Any(user => user.UserId == currentUserID)), "ID", "Name"); 

Anyを使用することができますがtrueを返します。この場合、グループICollection<UserGroup> UsersのユーザグループにUserId == currentUserIDがある場合、そのグループを結果に含めます。

+0

私はC#.NETにかなり新しくて、これらのクエリを理解しています。改善されたクエリをありがとう、これは私が作ったよりもはるかに理解しやすいです。このクエリは、同じことをやろうとする別のコード部分でも機能しましたが、 MultiSelectListのために働きます。私はそれが間違っているクエリではないと信じ始めていますが、奇妙な行動をしているものがあります。 – DarkCatapulter

+0

私は問題を見つけることができました。今解決しました、助けてくれてありがとう! :) – DarkCatapulter