私はテーブル形式でデータを表示するASP.NET MVCアプリケーションがあります。テーブルを検索するので、テキスト文字列を取得してサービスレイヤーに渡して、Linq to Entitiesを使ってクエリを作成します。どのように私は何かを複製することができますfooからsomeintegerどこのエンティティにLinqの '%50%'のように?
文字列を使用していくつかの列を検索したいと思います。 ids)、ユーザーは整数や文字列については気にしません。「1200」と入力し、注文番号に「1200」、または住所に「1200」を入力します。
問題は次のとおりです。 Linq-to-Entitiesクエリを構築する方法を見つけることができませんこのようになりますSQLでの結果:
select orderid, address from orders where orderid like '%1200%' or address like '%1200%'
データベースコンテキスト:
public DbSet<Person> Persons { get; set; }
public DbSet<Worker> Workers { get; set; }
public DbSet<WorkerSignin> WorkerSignins { get; set; }
Persons
とWorkers
テーブルは1 0..1の関係にあります。ワーカーレコードが存在する場合は、個人レコードも存在する必要があります。彼らは同じIDを共有します。ただし、ワーカーレコードは存在する必要はありません。
テーブルWorkers
とWorkerSignins
テーブルは関連していますが、クライアント要件のために強制されていません。ワーカーにはバーコード番号の付いたIDカード(dwccardnum
)がありますが、発行されたカードとDBに記録されたレコードの間に矛盾があることがあるので、一致するレコードがあるかどうかに関係なく、WorkerSignins
Workers
テーブル。ここで
は、私が働いているコードです:
allWSI = signinRepo.GetAllQ()
.Where(jj => jj.dateforsignin == date)
.Select(a => a);
if (!string.IsNullOrEmpty(search))
{
allWSI = allWSI
.Join(workerRepo.GetAllQ(), s => s.dwccardnum, w => w.dwccardnum, (s, w) => new { s, w })
.DefaultIfEmpty()
.Join(personRepo.GetAllQ(), oj => oj.w.ID, p => p.ID, (oj, p) => new { oj, p }).DefaultIfEmpty()
.DefaultIfEmpty()
.Where(jj => Convert.ToString(jj.oj.w.dwccardnum).Contains(search) ||
jj.p.firstname1.Contains(search) ||
jj.p.firstname2.Contains(search) ||
jj.p.lastname1.Contains(search) ||
jj.p.lastname2.Contains(search))
.Select(a => a.oj.s);
}
GetAllQ()メソッドは、のIQueryable()オブジェクトを返します。
問題は、この行にある: .Where(jj => Convert.ToString(jj.oj.w.dwccardnum).Contains(search) ||
私はこのエラーを取得する:エンティティへ LINQは方法「可能System.StringのToString(Int32)を」メソッドを認識しない、そしてこの方法はに翻訳することはできません店舗の表現「私は改宗を取り出し、このしようとした場合
:.Where(jj => jj.oj.w.dwccardnum.Contains(search) ||
が、私はこのエラーを取得: 『INT』は 『入って』の定義と最高の電子が含まれていませんXTensionメソッドオーバーロード「System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery、TSOURCE)は、」そこで質問があり、いくつかの無効な引数
を持っている... 句は、などを生成するために、どこでどのようにして構築します'%string%'を実行し、Linq to Entitiesを使用して整数列に対して実行しますか? (例えば、SQLにLINQを使用せずに)
それは動作します。オブジェクトサービス層(私はそれが正しいレイヤーだと思う)のSQLは非常に非効率的に見えます...弾丸を噛んでExpression Treeのビルディングに行く時間があるかもしれません... – JCii