1
お客様の名前に特定の文字列を含めることができるデータベースから顧客オブジェクトを読み込もうとしています。私はこれをまとめるための研究などを行ってきました。このようなクエリを構築する適切な方法ですか、そうでない場合は、「より正確な」アプローチまたはより効率的なアプローチは何ですか?御時間ありがとうございます。条件が正しいか、より良い方法を探している条件
私はLINQPadを所有しており、このクエリはそれを使用して作成されました。
var customerName = "J";
var street = "Rd";
var city = "asdf";
var state = "TN";
var zip = "27613";
var query = (
from c in customers
.Include("locations")
.Include("locations.address")
where
c.name.Contains(customerName) ||
c.locations.Any(l => l.address.street1.Contains(street)) ||
c.locations.Any(l => l.address.street2.Contains(street)) ||
c.locations.Any(l => l.address.city.Contains(city)) ||
c.locations.Any(l => l.address.state.Contains(state)) ||
c.locations.Any(l => l.address.zip.Contains(zip))
select new
{
c.id,
c.name,
c.locationId,
c.location,
Locations =
from l in c.locations
where
l.address.street1.Contains(street) ||
l.address.street2.Contains(street) ||
l.address.city.Contains(city) ||
l.address.state.Contains(state) ||
l.address.zip.Contains(zip)
select new
{
l.id,
l.address,
l.description,
l.locationType
}
}
);
query.Dump();
これは私に望ましい結果が得られないが、私は、このデータベースに最も丁寧で最善の方法をやっていることを確認します。
これは、Entity Frameworkを使用した検索のかなり典型的なパターンだと確信しています。
ありがとうCraig。あなたの答えは、私にグループ化を使用してより多くの可能性を示しています。私の検索仕様はすべてのORをとるのではなく、AND条件に変更されていますので、私はあなたの例を使って、可能であれば2つの述語を避けるために調整します。 – slimflem