この複雑な状況にlinq解があるかどうかわかりません。たとえば、お客様はを選択します。色:赤、サイズ:大、タイプ:コットン私は、お客様がそれぞれの単一の時間これらのフィルタを選択することを確実に知るならば、私はちょうどこのようなものだろう。ここではLinqに基づく複合検索フィルタを構築する
var shirts = ListOfShirts.Where(i=> i.Color.Contains("red") && Size.Contains("Large") && Type.Contains("Cotton"));
を現在の構造とビューからのフィルタの数を受け入れるアクションメソッドです。
クラス:
public partial class Shirt {
public long ID { get; set; }
public string Color { get; set; }
public string Size { get; set; }
public string Type { get; set; }
}
public class SelectedFilter {
public string Name { get; set; } // Filter Menu Title
public string Value { get; set; }
}
コントローラー:
public ActionResult Filter(IList<SelectedFilter> selectedFilters) {
var model = new List<Shirt>();
Shirt ListOfShirts = db.GetAllShirts();
var groups = selectedFilters.GroupBy(i => i.Name);
foreach (var g in groups)
{
var GroupName = g.FirstOrDefault().name;
var GroupValues = g.Select(i => i.value).ToList();
if (g.FirstOrDefault().name == "Color")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Color)).ToList();
}
else if (g.FirstOrDefault().name == "Size")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Size)).ToList();
}
else if (g.FirstOrDefault().name == "Type")
{
model = ListOfShirts.Where(i => GroupValues.Contains(i.Type)).ToList();
}
}
}
、基本的には、式をどのように構築しますその名前に基づいてプロパティにアクセスしますか? – Groo
これを書くことなく、式ツリーを見てください:https://msdn.microsoft.com/en-us/library/mt654263.aspxこれを行うより洗練された方法の1つです。それ以外の場合は、where句で演繹的推論を実行してください。 – RandomUs1r
*顧客が毎回これらのフィルタを選択することがわかっているなら、私はちょうどこのようなことをします* OK、何が問題なのですか?私は何かのように期待しています*しかし... * –