我目前在我的SQL数据库中有一个函数,它在一个日期中添加了一定的工作日,例如,如果您输入的是星期四的日期并添加两天,它将返回下一个星期一的日期.我对任何假期都不感到烦恼,只有周末才被排除在外.
问题是,这当前使用while循环完成,并且它似乎大大减慢了在生成表时使用它的存储过程.有没有人知道是否有任何方法可以在没有while循环或游标的情况下执行此计算?
仅供参考,这是当前的功能:
ALTER FUNCTION [dbo].[AddWorkDaysToDate]
(
@fromDate datetime,
@daysToAdd int
)
RETURNS datetime
AS
BEGIN
DECLARE @toDate datetime
DECLARE @daysAdded integer
-- add the days, ignoring weekends (i.e. add working days)
set @daysAdded = 1
set @toDate = @fromDate
while @daysAdded <= @daysToAdd
begin
-- add a day to the to date
set @toDate = DateAdd(day, 1, @toDate)
-- only move on a day if we've hit a week day
if (DatePart(dw, @toDate) != 1) and (DatePart(dw, @toDate) != …Run Code Online (Sandbox Code Playgroud) 每当我必须在会话中存储任何内容时,我就会习惯通过这样的方式尽可能减少访问会话的次数:
private List<SearchResult> searchResults;
private List<JobSearchResult> SearchResults
{
get
{
return searchResults ?? (searchResults = Session["SearchResults"] as List<SearchResult>);
}
set
{
searchResults = value;
Session["SearchResults"] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我的理由是,如果在回发期间多次使用该对象,则必须不经常从Session中检索该对象.但是,我完全不知道这在性能方面是否真的有帮助,或者实际上只是浪费时间,甚至可能是一个坏主意.有没有人知道如何将计算成本高昂的不断拉出会话的对象与上述方法进行比较?或者,如果有任何最佳实践?
我在使用ajax控件工具包TabPanel时遇到了一个有点奇怪的错误.我有4个标签,如下所示:
[TAB1] [TAB2] [TAB3] [TAB4]
现在,选项卡2应仅在某些情况下出现,因此其可见性设置为false.然而,虽然它是不可见的,但如果我点击Tab 3,它将在切换到Tab 1之前加载选项卡.同样选择tab4将加载tab4但是然后立即切换到tab3.在服务器端,ActiveTabChanged事件被命中两次,一次是正确选择的选项卡,一次是它正在切换的选项卡.
如果我将Tab2移动到选项卡行的末尾,一切正常.稍微阅读了工具包,我认为这与活动选项卡索引有关,并且javascript将其设置为低于应该的值,但我不确定如何修复它.
我有一段相当长的代码,用于计算列表中将其属性之一设置为特定值的对象的数量。然而,我上面提到的几乎所有内容都会在运行时传递,留给我的是:
((List<MyObject>)this.DataSource).Count(d => d.GetType().GetProperty(MyProperty).GetValue(d, null).ToString() == ValueToMatch);
Run Code Online (Sandbox Code Playgroud)
问题在于该列表作为对象存储在 Datasource 属性中。为了使用 count,目前我必须将此对象转换为 MyObject 类型的列表。我希望能够在数据源中存储任何类型的 IEnumerable 。我知道存储在 Datasource 中的对象始终是一个 List,但我很难让 C# 相信这一事实。它一直抱怨类型安全。
我使用的是 .Net 3.5,因此由于协变/逆变,向上转换为 List<Object> 在运行时会失败(我永远记不起哪个是哪个)。我同样无法转换为 IEnumerable。有没有办法让这段代码与任何类型的 IEnumerable 一起工作?