0

次のようなクラス(簡略化)があります。

class AppMeta
{
    public int Id { get; set; }
    public string Scope { get; set; }
    public User CreatedBy { get; set; }
}

整数のリストを相互参照し、一致を破棄することで結果を適切にフィルター処理する LINQ ステートメントを作成しました。

var hiddenApps = List<int>();
//populate hiddenApps
var listItems = List<rawdata>;
//populate listItems
List<AppMeta> apps = AppMeta.Collection(listItems).Where(i => !hiddenApps.Contains(i.Id)).ToList()

私の質問は、次のようにこのリストをさらにフィルタリングする必要があるということです。

(Where Scope == "user" && Where User.LoginName == CurrentUser.LoginName)

IE という 1 つの Linq ステートメントでそれを行うことはできますか? 上記の行と組み合わせることはできますか? これを行う最善の方法は何ですか?

4

2 に答える 2

7

Where句には複数の条件を指定できます。Where 句を次のように変更します。

.Where(i => !hiddenApps.Contains(i.Id) 
            && i.Scope == "user" 
            && i.CreatedBy.LoginName == CurrentUser.LoginName )

したがって、クエリは次のようになります。

List<AppMeta> apps = AppMeta.Collection(listItems)
                            .Where(i => !hiddenApps.Contains(i.Id) 
                                   && i.Scope == "user" 
                                   && i.CreatedBy.LoginName == CurrentUser.LoginName)
                            .ToList();
于 2013-04-05T05:55:48.037 に答える
0

Where別のクエリを作成する代わりに、それらの条件をメソッドに追加してみませんか?

var loginName = CurrentUser.LoginName;
List<AppMeta> apps = AppMeta.Collection(listItems)
                        .Where(i => !hiddenApps.Contains(i.Id) && 
                                    i.Scope == "user" &&
                                    i.CreatedBy == loginName )
                        .ToList();

そのCurrentUser.LoginNameタイプがUser

于 2013-04-05T06:04:40.787 に答える