1

私はLINQを初めて使用しています。現在、ユーザーが所属するすべての組織をループして、フォームでさまざまな操作を実行する権限があることを確認しています。

次のようになります。

//loop through all user orgs to see if what they selected, they have access to
foreach (OrgPermission userOrg in user.orgs)
            {
                //get the org permissions for the selected org
                if ((ddlOrg.SelectedValue == (userOrg.Org.orgCode + "-" + userOrg.Org.orgSubCode)))
                {
if (userOrg.type.Contains("3") || userOrg.type.Contains("00"))
                        {
/

/do something here.
}}}

私はループを取り除こうとしています。ユーザーが多くの組織を持っているかのように、実行に少し時間がかかり、アプリケーションの実行時間を最適化しようとしています。

私は次のことを試しました:

  bool has = user.orgs.Any(cus => cus.Org.orgCode + "-" + cus.Org.orgSubCode == ddlOrg.SelectedValue);

ご覧のとおり、ddlOrg ドロップダウン値は org-suborg 形式です。しかし、私は常に偽になっています。

また、結果をブール値ではなく、おそらく単一の user.ORG として保存して、それを使用して権限やその他のものを確認できるようにしたいと考えています。

私はここで正しい軌道に乗っていますか?誰かが私を正しい方向に向けてください。

4

1 に答える 1

1

通常、ループを取り除くのではなく、ループされているアイテムをフィルタリングします。

var users = user.orgs.Where(userOrg => ddlOrg.SelectedValue == (userOrg.Org.orgCode + "-" + userOrg.Org.orgSubCode) && (userOrg.type.Contains("3") || userOrg.type.Contains("00")));

 foreach(OrgPermission userOrg in users)
 {
      // do your operation
 }

そうは言っても、LINQ クエリは依然としてアイテムを効果的にループしているため、これはそれほど高速ではない可能性がありますが、管理が簡単になる可能性があります。

1 つだけ (つまり、最初のもの) を探す必要がある場合は、次の方法OrgPermissionで高速化できます。

var userOrg = user.orgs.FirstOrDefault(userOrg => ddlOrg.SelectedValue == (userOrg.Org.orgCode + "-" + userOrg.Org.orgSubCode) && (userOrg.type.Contains("3") || userOrg.type.Contains("00")));

// userOrg will be the OrgPermission if found, or null if not.
于 2013-07-17T16:58:01.517 に答える