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 的调整是为了?是否有我可以通过反射或其他方法提取的值来找出被击中的内容?