繁体   English   中英

Linq条件在哪里不起作用

[英]Linq conditional where not working

以下内容不在SQL中生成where子句。

search.Where部分在我调试时正在执行,但在SQL事件探查器中看不到。

using (var db = new CERTContext())
{
    var search = db.Project.Include("ValueStream").Include("Function").AsQueryable();
    if (!lookForDate)
    {
        search.Where(p => p.ProjectName.Contains(searchText) ||
                          p.ProjectDescription.Contains(searchText) ||
                          p.EquipmentName.Contains(searchText) ||
                          p.ValueStream.Description.Contains(searchText) || 
                          p.ValueStream.Description.Contains(searchText) ||
                          p.TrackingId.Contains(searchText) ||
                          p.ENumber.Contains(searchText) ||
                          p.ShamrockNumber.Contains(searchText));

        //.Take(10)
        //.OrderByDescending(p => p.ProjectID);
        //.ToList();
    }
    else
    {// Search on date
        search.Where(p =>
        (System.Data.Objects.EntityFunctions.TruncateTime(p.StartDate) == searchDate));
        //.Take(10)
        //.OrderByDescending(p => p.ProjectID);
        //.ToList();
    }                              
    if (showDeleted != true)
    {
        search.Where(p => p.Deleted == false);
    }
    pList = search.Take(10).OrderByDescending(p => p.ProjectID).ToList();

}// using (var db = new CERTContext())

这就是我得到的。 它具有选择的前十名,orderby和联接,但没有位置。

SELECT 
[Limit1].[ProjectID] AS [ProjectID], 
[Limit1].[FunctionId] AS [FunctionId], 
[Limit1].[ValueStreamId] AS [ValueStreamId], 
[Limit1].[TrackingId] AS [TrackingId], 
[Limit1].[VersionNo] AS [VersionNo], 
[Limit1].[VersionDate] AS [VersionDate], 
[Limit1].[ProjectName] AS [ProjectName], 
[Limit1].[Deleted] AS [Deleted], 
[Limit1].[Closed] AS [Closed], 
[Limit1].[ProjectLead] AS [ProjectLead], 
[Limit1].[ProjectDescription] AS [ProjectDescription], 
[Limit1].[StartDate] AS [StartDate], 
[Limit1].[CurrentPhase] AS [CurrentPhase], 
[Limit1].[ENumber] AS [ENumber], 
[Limit1].[ShamrockNumber] AS [ShamrockNumber], 
[Limit1].[EquipmentName] AS [EquipmentName], 
[Limit1].[ConceptExpectedEndDate] AS [ConceptExpectedEndDate], 
[Limit1].[PlanningExpectedEndDate] AS [PlanningExpectedEndDate], 
[Limit1].[DesignExpectedEndDate] AS [DesignExpectedEndDate], 
[Limit1].[InstallExpectedEndDate] AS [InstallExpectedEndDate], 
[Limit1].[DeployExpectedEndDate] AS [DeployExpectedEndDate], 
[Limit1].[ConceptActualEndDate] AS [ConceptActualEndDate], 
[Limit1].[PlanningActualEndDate] AS [PlanningActualEndDate], 
[Limit1].[DesignActualEndDate] AS [DesignActualEndDate], 
[Limit1].[InstallActualEndDate] AS [InstallActualEndDate], 
[Limit1].[DeployActualEndDate] AS [DeployActualEndDate], 
[Limit1].[ScalingQ1Text] AS [ScalingQ1Text], 
[Limit1].[ScalingQ2Text] AS [ScalingQ2Text], 
[Limit1].[ScalingQ3Text] AS [ScalingQ3Text], 
[Limit1].[ScalingQ1Answer] AS [ScalingQ1Answer], 
[Limit1].[ScalingQ2Answer] AS [ScalingQ2Answer], 
[Limit1].[ScalingQ3Answer] AS [ScalingQ3Answer], 
[Limit1].[ScalingNotes] AS [ScalingNotes], 
[Limit1].[CreateUserName] AS [CreateUserName], 
[Limit1].[LastUserName] AS [LastUserName], 
[Limit1].[CreatedDate] AS [CreatedDate], 
[Limit1].[EditedDate] AS [EditedDate], 
[Extent2].[ValueStreamId] AS [ValueStreamId1], 
[Extent2].[Description] AS [Description], 
[Extent3].[FunctionID] AS [FunctionId1], 
[Extent3].[Description] AS [Description1]
FROM    (SELECT TOP (10) [c].[ProjectID] AS [ProjectID], [c].[FunctionId] AS [FunctionId], [c].[ValueStreamId] AS [ValueStreamId], [c].[TrackingId] AS [TrackingId], [c].[VersionNo] AS [VersionNo], [c].[VersionDate] AS [VersionDate], [c].[ProjectName] AS [ProjectName], [c].[Deleted] AS [Deleted], [c].[Closed] AS [Closed], [c].[ProjectLead] AS [ProjectLead], [c].[ProjectDescription] AS [ProjectDescription], [c].[StartDate] AS [StartDate], [c].[CurrentPhase] AS [CurrentPhase], [c].[ENumber] AS [ENumber], [c].[ShamrockNumber] AS [ShamrockNumber], [c].[EquipmentName] AS [EquipmentName], [c].[ConceptExpectedEndDate] AS [ConceptExpectedEndDate], [c].[PlanningExpectedEndDate] AS [PlanningExpectedEndDate], [c].[DesignExpectedEndDate] AS [DesignExpectedEndDate], [c].[InstallExpectedEndDate] AS [InstallExpectedEndDate], [c].[DeployExpectedEndDate] AS [DeployExpectedEndDate], [c].[ConceptActualEndDate] AS [ConceptActualEndDate], [c].[PlanningActualEndDate] AS [PlanningActualEndDate], [c].[DesignActualEndDate] AS [DesignActualEndDate], [c].[InstallActualEndDate] AS [InstallActualEndDate], [c].[DeployActualEndDate] AS [DeployActualEndDate], [c].[ScalingQ1Text] AS [ScalingQ1Text], [c].[ScalingQ2Text] AS [ScalingQ2Text], [c].[ScalingQ3Text] AS [ScalingQ3Text], [c].[ScalingQ1Answer] AS [ScalingQ1Answer], [c].[ScalingQ2Answer] AS [ScalingQ2Answer], [c].[ScalingQ3Answer] AS [ScalingQ3Answer], [c].[ScalingNotes] AS [ScalingNotes], [c].[CreateUserName] AS [CreateUserName], [c].[LastUserName] AS [LastUserName], [c].[CreatedDate] AS [CreatedDate], [c].[EditedDate] AS [EditedDate]
    FROM [dbo].[Projects] AS [c] ) AS [Limit1]
LEFT OUTER JOIN [dbo].[ValueStreams] AS [Extent2] ON [Limit1].[ValueStreamId] = [Extent2].[ValueStreamId]
LEFT OUTER JOIN [dbo].[Functions] AS [Extent3] ON [Limit1].[FunctionId] = [Extent3].[FunctionID]
ORDER BY [Limit1].[ProjectID] DESC

只是调用Where并不会改变您对其调用的查询的任何内容。 相反,它返回一个查询...您当前正在忽略它。 你要:

search = search.Where(/* code as before */);

编辑:然后,您还需要将声明更改为:

IQueryable<Project> search = db.Project.(code as before)

我希望AsQueryable() ,但这显然是必需的。

将搜索结果放入。像这样返回搜索位置:

search = search.Where( // same with your code

您从查询中获得的结果丢失了。 您需要将其分配回搜索变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM