我有一个表单,允许用户进行各种搜索。需要连接的表格因输入的搜索条件而异。(我的示例非常简单,因为两个表格使用相同的子表格进行连接,但实际问题并不简单。)
我一直在使用我所称的LINQ堆叠技术,像这样:
所以,如果某个文本字段被设置,我会根据需要添加到查询中。这实际上很好用,但是当我使用SQL Profiler查看生成的查询时,它每次添加新的条件时都会进行INNER JOIN连接表。
也就是说,LogAssignments表被包含了3、4、5次。有没有办法防止它重复JOIN同一张表?
或者,我能不能有更好的方法来做这个?我已经看过Predicate Builder,但它似乎不允许连接表,在我的情况下这是必需的。
谢谢!
我一直在使用我所称的LINQ堆叠技术,像这样:
IQueryable<LogENT> results = Context.AssignedLogsENT.Where(l => l.AgencyId);
if(txtFirstName.Text != null)
results = from r in results
join a in Context.LogAssignmentsENT on r.DisplayLogId equals a.LogId
join p in Context.PersonsENT on a.ObjectId equals p.DisplayPersonId
&& !a.Deleted &&
p.FirstName.StartsWith(Object.FirstName)
select r;
if(txtLastName.Text != null)
results = from r in results
join a in Context.LogAssignmentsENT on r.DisplayLogId equals a.LogId
join p in Context.PersonsENT on a.ObjectId equals p.DisplayPersonId
&& !a.Deleted &&
p.LastName.StartsWith(Object.LastName)
select r;
所以,如果某个文本字段被设置,我会根据需要添加到查询中。这实际上很好用,但是当我使用SQL Profiler查看生成的查询时,它每次添加新的条件时都会进行INNER JOIN连接表。
也就是说,LogAssignments表被包含了3、4、5次。有没有办法防止它重复JOIN同一张表?
或者,我能不能有更好的方法来做这个?我已经看过Predicate Builder,但它似乎不允许连接表,在我的情况下这是必需的。
谢谢!