LINQ で、どの WHERE 句がヒットしたかを確認する方法はありますか? Company というオブジェクトがあります。これは複数の BillTo オブジェクトを持つことができ、各 BillTo オブジェクトは複数の Generator オブジェクトを持つことができます。
Company
|
+-- BillTo1 - named First
| |
| |-- Generator1 - named Alpha
| |
| +-- Generator2 - named Beta
|
+-- BillTo2 - named Second
|
+-- Generator3 - name Gamma
これがlinqステートメントです(他のwhereステートメントの余分なものを取り除きました):
bool HaveCompany = !string.IsNullOrWhiteSpace(Company);
var AllData = (from co in db.Companies
join bt in db.Billtoes on co.ID equals bt.CompanyID into bts
from b in bts.DefaultIfEmpty()
join gn in db.Generators on b.ID equals gn.BillToID into gns
from g in gns.DefaultIfEmpty()
where co.Active == true
&& (
co.Name.Contains(HaveCompany ? Company : co.Name) ||
b.Name.Contains(HaveCompany ? Company : b.Name) ||
g.Name.Contains(HaveCompany ? Company : g.Name)
)
select new {
CompanyID = co.ID,
BillTo = b,
Generator = g,
Name = co.Name,
}).ToList();
問題は、すべてが正しく検出されることです。BillTo で「名前」の一致が見つかった場合、「Generator = g」を実行する必要はありません。逆もまた同様で、Generator で一致する場合は、「BillTo = b」を実行する必要はありません。
したがって、どの WHERE 句がヒットしたかを知る方法があれば、適切な b または g を結果に追加します。結果を取得した後、WHERE 句として実際に送信している 7 つのフィールドのそれぞれを再確認した後、繰り返し実行できることはわかっていますが、余分なコードが多すぎるようです。おそらく私のLINQの微調整は順調ですか?何がヒットしたかを調べるために、リフレクションまたは何かを介して抽出できる値はありますか?