単純に LINQ で動作しないコードに問題がありますが、単純な for..each として動作します。説明と解決策をいただければ幸いです。
次のように構成された3つのクラス User 、 User 、 UserPermissions があります。
クラスのユーザー
ObservableCollection<User> GetList
クラス ユーザー
Public int id {get;set;}
Public string UserName {get;set;}
Public UserPermissions Permissions {get;set;}
クラス UserPermissions
Public Int ID {get;set;}
Public int ApplicationID {get;set;}
これは機能し、正しいユーザーを返します。
Users users = new Users();
foreach (User u in users.GetList() )
{
if (u.UserName==username && u.Permissions.ApplicationID == applicationId)
{
usr = u;
break;
}
}
以下のlinqは同じことを「すべき」ですが、そうではありません。出力ウィンドウにエラーが返されたり発生したりすることはなく、ステップオーバーした後、musers 変数は単に存在しません。キャストをより具体的にし、AsQueryable を使用しようとしました。2 つの from コマンドを使用して let p=u.Permissions を試してみましたが、何も修正されていないようです。
私の心配は、他のクラスがこれに悩まされ、後でより複雑なクエリが使用されるにつれて問題が発生することです。
var musers = from Users.User u in UsersList
where (u.UserName==userName)
&& (u.Permissions.ApplicationID == ApplicationId)
select u.ID;
次のエラーに関するもう 1 つの情報はありますか?
var t1 = UsersList.SelectMany( u => u.Permissions);
エラー 1 メソッド 'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable, System.Func>)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。