Unityにて絞り込み機能を作成しようと思っており、
SQL文をList型に適応したいのですが検索しても見つからず詰まってしまいました。
タイプが1~6まであり、それぞれボタンと連動しています。
ボタンはトグルになっていてタイプ1とタイプ3が選択状態であれば、
タイプ1とタイプ3に合致するデータのみを表示します。
下記のようなWHERE句をLINQに渡したいのですがどのようにしたら良いかがわかりません。
"WHERE Type == タイプ1 OR rarity == タイプ3"
●環境
Unity5.3.4
.NetFrameWork:3.5(C#3.0相当)
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
lang
1var list = new List<SampleData>(); 2var result = list.Where(data => data.Type == "type1" || data.Rarity == "type3");
上記のようなラムダ式による抽出を動的に行う方法です。
lang
1var parameters = Expression.Parameter(typeof(SampleData), "data"); 2var body = Expression.OrElse( 3 Expression.Equal(Expression.PropertyOrField(parameters, "Type"), Expression.Constant("type1", typeof(string))), 4 Expression.Equal(Expression.PropertyOrField(parameters, "Rarity"), Expression.Constant("type3", typeof(string)))); 5var lambda = Expression.Lambda<Func<SampleData, bool>>(body, parameters); 6var predicate = lambda.Compile(); 7 8var list = new List<SampleData>(); 9var result = list.Where(data => predicate(data));
更に、選択されたボタンからbody
にあたる部分を動的に生成することで、
希望される処理が可能かと思います。
<参考>
http://www.atmarkit.co.jp/fdotnet/dotnettips/986dynamiclinq/dynamiclinq.html
投稿2016/05/27 08:02
総合スコア234
0
比較対象となるフィールド数が可変(検証するボタンの種類が可変)の場合、Linq for Objects では、対象フィールドの値だけを含んだリストを作成し、これと join することで該当するオブジェクトだけを抽出するのが良いと思います。
具体的には・・・
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4 5class A { 6 public string Name; 7 public int Type; 8 public A(string n, int t) { 9 Name = n; 10 Type = t; 11 } 12} 13 14class MainClass { 15 static void Main() { 16 int[] type_array = {2,4}; 17 A[] a_array = { 18 new A("name1-1", 1), 19 new A("name1-2", 1), 20 new A("name2-1", 2), 21 new A("name2-2", 2), 22 new A("name2-3", 2), 23 new A("name3-1", 3), 24 new A("name4-1", 4), 25 new A("name4-2", 4), 26 new A("name4-3", 4), 27 new A("name5-1", 5), 28 new A("name5-2", 5) 29 }; 30 31 var result = 32 from a in a_array 33 join t in type_array on a.Type equals t 34 select a; 35 36 foreach(var a in result) { 37 Console.WriteLine("Name = " + a.Name); 38 } 39 } 40} 41 42// 出力 43// Name = name2-1 44// Name = name2-2 45// Name = name2-3 46// Name = name4-1 47// Name = name4-2 48// Name = name4-3
このように書くことができます。 このサンプルコードでは type_array 配列の内容が変化しても、該当するオブジェクトを抽出できます。
ご参考になれば。
投稿2016/05/26 15:31
総合スコア2425
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/28 08:11 編集
2016/05/28 21:39 編集
2016/05/29 15:58