テーブルには、プロパティ、車、その他を表す整数を保持するカテゴリの列があります。さまざまな列を検索する最も保守的な方法
プロパティを検索するキーワードがPropertyType、State、County、およびNoOfBathsの列に焦点を当てるように、以下に示すカテゴリごとに異なる列があります。自動車のキーワード検索は、モデル、モデル、年などに重点を置いています。
すべてのエントリにはすべての列にデータが含まれていますが、データによってはカテゴリによって若干異なる意味があることがあります。たとえば、PropertyType列は車のCarTypeデータと他の列のItemTypeデータを保持しますが、列はプロパティを検索するときにのみ重要です。
プロパティ
PropertyTypeは、
ロケーションステート、
場所郡、
浴場
車のない
メイク、
モデル、
年、
ロケーションステート
その他
ITEMNAME、
メイク、
カラー、関心の
列がパフォーマンス上の理由のために4つに限定された
ロケーションステート。 1つの検索テキストボックスは、GoogleのようにUIで使用されます。クエリが実行される前にユーザーの検索カテゴリを事前に識別するために使用されるアルゴリズムは、許容可能な98%の精度を示します。アルゴリズムはまた、色、州、郡などが何であるかを推測します。 サイトは、C#、エンティティフレームワーク、SQLサーバを使用して開発された小さな広告サイトとして開始されました。
私は小さなプロジェクトとして考えていたので、私はlinqでエンティティにそれを取り除くことができると思った。 if文を使用してヌルフィールドを削除すると、各カテゴリの有限数のクエリ(2のべき乗から4まで)でした。
例: 1
とNULL値が句が構成されている前にチェックされているqueryHelper
のためのいくつかのリスト。
私がやったときは、柔軟性と保守性に優れているとはいえ、このような小さなプロジェクトがこの種の論理にふさわしいかどうかは不明でした。関心のある列は、コードに影響を与えることなく変更できます。
これを達成するより簡単な方法があるのでしょうか?
第2に、linqに 'Ignorable()'関数がないため、比較される値がnullまたは空の場合にwhere句の指定部分を無視できるのはなぜですか?
例:1は
var results = context.Items.Where(m=>m.make.Ignorable() == make &&
m.model.Ignorable() == model && m.year.Ignorable() ==year &&
m.state.Ignorable() == state);
...
または記号をmodifed、「¬」と言うので、 例:のような同じことを達成します。 1は、私がこれを行うためにはるかに簡単で保守方法は、特定のクラスでoverrided Equals()
方法だと思います
var results = context.Items.Where(m=>m.make ¬== make && m.model ¬== model
&& m.year ¬==year && m.state ¬== state);
...
車objCars =新しいCars(){model = "favmodel"、year = "2017"、locationState = "mystate"};この場合、objCars.makeはデフォルトでnullになり、返されます(this.Make == other.Make)&& ... return(this.Model)のようにmakeテストを省略するのではなく、make == NULLの場所に戻ります。 == other.Model)&& (this.Year == other.Year)&& (this.Location_State == other.Location_State); – user7363900
すでに述べたように、条件を変更して比較を効果的に行うことができます。 –
EntityFrameworkのようなLinq2Entitiesシステムを使用するときは、equalsをオーバーロードできません –