2017-09-17 7 views
2

私は近くにいるか、途中にいるように感じます。 MVC5 C#webappにもかかわらず、いくつかの大きな助けを読んだことがありますが、私は結果を得る正確な構文を見つけることができないようです。配列またはリストを使用したC#actionresultフィルタ

私のコントローラでは、文字列の連結に基づいて結果をフィルタリングしようとしています(基本的には、配列やリストに変換することができます。配列/リストには1〜14の変数を指定できます。下のあたりコントローラー:

public ActionResult Result(string Person) 
{ 
    Hierarchy h = db.Hierarchies.First(i => i.People == Person); 
    if (h == null) 
    { 
     return HttpNotFound(); 
    } 
    List<string> list = h.Hierarchy1.Split('/').ToList(); 

    //Trial 1 
    var dat = from p in list where db.Hierarchies.Contains(p.list) select p; // 

    //Trial 2 
    var dat = db.Hierarchies.Where(s => s.People.Contains(list));// 

    return View("Result", dat); 
} 

基本的に人は最初の表階層で検索され、そしてこのことから、私は「/」で区切られた父方のリスト(hierarchy1)を取得します。このリストから、階層テーブルのリストにないすべての行をフィルタリングしようとしています。テーブルには、行ごとの詳細情報(生年月日、年齢、目の色など)が含まれています。すべての名前はユニークなので、これに起因するエラーは発生しません。

私は青い目の誰もが簡単に検索できるように成功しましたが、複数の検索があると、それを集めることができません。

私は配列として試しましたが、私の最新の読書は、リストが私のstring.splitを格納する方が良いと言います。

Hierarchy1文字列は次のように見ることができます:

クリス・ジョン・ウィルクス/デヴィッド・ジョン・ウィルクス/クレイグ・ラムゼイ・ウィルクス/マイケル・ウィルクス

階層表の例:

  • ヘッダ - Hierarchy1。人; DOB;年齢;目;髪;上の階層1のデータ;マイケル・ウィルクス; 05802/1980; 37;ブルー、ブラウン

は基本的に私は上記のデータに基づいて、以下のあたりのビュー(foreachの)のスルーリスト私ができるループ取得しようとしています:

  • クリスジョン・ウィルクスDOBを、年齢、目。ヘア; (グレートグランドの父)
  • デビッドジョンウィルクスDOB;年齢;目;髪; (Grand father)
  • Craig Ramsey Wilks DOB;年齢;目;髪; (父)
  • マイケル・ウィルクスDOB;年齢;目;髪; (息子)

など

ここにリストでお試し1エラーの場合は---> --->ここにリストで裁判2エラーの場合(P。リスト

が含まれています含まれている(リスト

だから私はwayyyyオフ適切なフォーマットであるものにすることができますが、私は、このワットをインターネットを検索し、SOされています私が一緒にできる最高のもののいくつかとして。

誰もが助けて援助します。

UPDATE 18/09/2017 私は私の最初の試みをあきらめていると私は、私は、これは私があると思い、いくつかの良い結果を得ている=「LINQ」で検索した方が良いキーワードを見つけたと思います私を正しい答えに向ける。

 List<string> list = new List<string>(); 
     list = h.Hierarchy1.Split('/').ToList(); 

     foreach (string k in list) 
     { 
      IQueryable<Hierarchy> TQuery = from a in db.Hierarchies 
              where (a.People == k) 
              select a; 
     } 
     return View("Result", TQuery.ToList()); 

は、だから今、それは私のクエリの作品のように見えますが、私の「リターン・ビュー」「のTQuery」.ToList上のエラーを示しています。 私は外からではなくforeachループ内で呼び出すので、エラーを投げずに外から出す方法を理解する必要があるからです。それから私は実際に動作するかどうかを確認するために実行することを投稿します。

私はまだforeachループせずにそれを行う方法があると思いますが、それは 19/09/2017

UPDATE私をエスケープ - の作業結果 は、だから私はそれとして働いて得ることができましたIQueryableとforeachがなくても、これはかなり最適な解決策であると思います。この時点でリストの人は注文されていませんが、それは軽微だと思います。

だからフルにそれがある:

public ActionResult Result(string Person) 
    { 
     Hierarchy h = db.Hierarchies.First(i => i.People == Person); 
     if (h == null) 
     { 
      return HttpNotFound(); 
     } 
     int lvl = h.Level; 
     var list = new string[lvl]; 
     list = h.Hierarchy1.Split('/'); 

     IQueryable<Hierarchy> TQuery = from a in db.Hierarchies 
             where list.Contains(a.People) 
             select a; 
     return View("Result", TQuery.ToList()); 
    } 
+1

あなたはなぜこの方法は、パラメータとして文字列を必要と含まれてい渡しリスト(文字列のリスト)?リストの上にForEachループを作成しようとしましたか? –

+0

@AryanFirouzyan - はい、私はforeachループを使い始めており、あまり成功しませんでした。私は検索時に間違ったキーワードを使用していたと思います。私は重要だと思う "LINQ"で運が増しているようです。私は自分の投稿を私が見つけたもので更新します - まだ動作しませんが、私は近いと思います – Clay

+1

foreachループに問題があります。 TQueryは、リストの最後の項目にあるものだけを返します。ループの前にnullを指定してTQueryを開始し、その結果をループに追加します。各kのdb.Hierarchies.Where(p => p.Poeple == k)をTQueryに追加します。 –

答えて

2
public ActionResult Result(string Person) 
{ 
    Hierarchy h = db.Hierarchies.First(i => i.People == Person); 
    if (h == null) 
    { 
     return HttpNotFound(); 
    } 
    int lvl = h.Level; 
    var list = new string[lvl]; 
    list = h.Hierarchy1.Split('/'); 

    IQueryable<Hierarchy> TQuery = from a in db.Hierarchies 
            where list.Contains(a.People) 
            select a; 
    return View("Result", TQuery.ToList()); 
} 

私はおそらく追加する必要があります - それは私の配列のサイズを与えたので、運によって私は表に「レベル」としてHierarchy1あたりの人々の数を格納しました"lvl"

私はまだ@AryanFirouzyanがよりよい解決策を指していたと思いますが、私はこの上で10時間を費やしてきたので、私は私が私の次の問題へ移動する必要があると思います:)

+0

この回答に追加 - 私はこれを注文する方法を見つけました。私はそれぞれのレベルの価値があったので、最後にかなり明白になった。 "select a"の前に "orderby a.Level"を挿入すると、最小のレベルから最大のレベルにソートされました。だから私は、これが最初の親戚との関係で人が所属していた "階層"の位置を記憶していたと思います。 – Clay

関連する問題