Entity Framework
とLINQ
を使用して、検索クエリ(商品スペースの区切り付き)と商品テーブルを比較する方法を検討しています。私は基本を超えて、どちらかと以前の経験を持っていない:LINQ比較の基本的な実行
var products = new List<Product>();
using (var ctx = new Context())
{
var query = id.SearchQuery.Trim().Split(' ');
foreach (var value in query)
{
products.AddRange(ctx.EagerProducts().Where(product =>
product.Name.Contains(value) ||
product.Specification.Contains(value) ||
product.CarModel.Contains(value) ||
product.Reference.Contains(value) ||
product.Category.Name.Contains(value) ||
product.Type.Name.Contains(value) ||
product.CarBrand.Name.Contains(value) ||
product.ProductBrand.Name.Contains(value) ||
product.Store.Name.Contains(value)));
}
products = products.Distinct().ToList();
}
return View(products);
コードが動作し、フィルタに一致する明確な結果のリストを返しますが、何かが、まだ私には非常に適切ではないようです。私はこれがこれを行う最も効率的な方法ではないように感じる。私は正しいのですか、これはよく書かれていますか?どのように私は上記のロジックをより良い実行することができるかについての任意の提案?
P.S. EagerProductsは、熱心に読み込まれた製品を返すコンテキストの拡張です。私は考えることができる
私はそれを編集しましたテキストを1回だけ計算することでビットをさらに最適化するには、役に立たないかもしれないし、コンパイラが自動的に何かを行うかもしれない。 – Dharun
まず、linq2EFで正しく動作しないと思いますが、正しく動作すれば間違っています:name = "aba"、specification = "dc"、クエリオブジェクトの唯一の項目は "abadc"です。真を返しますが、間違っています。 –
@SaeedAmiriありがとう、実際にはそれまで気付かなかった(最初に待つのは良い考えだった)。 P.S.クエリ自体についてどう思いますか? –