小编Kei*_*ith的帖子

Microsoft SQL 2005中的自然(人类字母数字)排序

我们有一个大型数据库,我们有数据库端分页.这很快,在几分之一秒内从数百万条记录中返回50行的页面.

用户可以定义自己的排序,基本上选择要排序的列.列是动态的 - 一些具有数值,一些日期和一些文本.

虽然大多数按预期文本排序是愚蠢的.嗯,我说愚蠢,它对计算机有意义,但让用户感到沮丧.

例如,按字符串记录ID排序会产生如下内容:

rec1
rec10
rec14
rec2
rec20
rec3
rec4
Run Code Online (Sandbox Code Playgroud)

...等等.

我希望这个考虑到这个数字,所以:

rec1
rec2
rec3
rec4
rec10
rec14
rec20
Run Code Online (Sandbox Code Playgroud)

我无法控制输入(否则我只是在前导000中格式化)而且我不能依赖单一格式 - 有些类似于"{alpha code} - {dept code} - {rec id}".

我知道在C#中有几种方法可以做到这一点,但是不能拉下所有记录来对它们进行排序,因为这样会慢.

有谁知道在Sql server中快速应用自然排序的方法?


我们正在使用:

ROW_NUMBER() over (order by {field name} asc)
Run Code Online (Sandbox Code Playgroud)

然后我们就这样分页.

我们可以添加触发器,但我们不会.他们所有的输入都是参数化的,但是我无法改变格式 - 如果他们输入"rec2"和"rec10",他们希望它们就像那样,以自然的顺序返回.


我们有有效的用户输入,遵循不同客户的不同格式.

有人可能会去rec1,rec2,rec3,... rec100,rec101

而另一个可能会去:grp1rec1,grp1rec2,... grp20rec300,grp20rec301

当我说我们无法控制输入时,我的意思是我们不能强迫用户更改这些标准 - 它们有一个像grp1rec1的值,我不能将其重新格式化为grp01rec001,因为这会改变用于查找的内容和链接到外部系统.

这些格式变化很大,但通常是字母和数字的混合.

在C#中对它们进行排序很容易 - 只需将其分解{ "grp", 20, "rec", 301 },然后依次比较序列值.

但是,可能有数百万条记录并且数据被分页,我需要在SQL服务器上进行排序.

SQL服务器按值排序,而不是比较 - 在​​C#中我可以将值拆分为比较,但在SQL中我需要一些逻辑(非常快)获得一致排序的单个值.

@moebius - 你的答案可能会有效,但是为所有这些文本值添加排序键确实感觉像是一个丑陋的妥协.

sql-server sorting sql-server-2005 natural-sort

44
推荐指数
6
解决办法
3万
查看次数

.NET Core依赖注入实例何时处理?

ASP.NET Core使用扩展方法IServiceCollection来设置依赖注入,然后当需要类型时,它使用适当的方法来创建新实例:

  • AddTransient<T> - 添加每次请求时再次创建的类型.
  • AddScoped<T> - 添加为请求范围保留的类型.
  • AddSingleton<T> - 在第一次请求时添加一个类型并保持它.

我有类型的实现IDisposable,如果没有处理它们会导致问题 - 在Dispose实际调用的每个模式中?

有什么我需要添加(例如异常处理)以确保实例始终处置?

dependency-injection idisposable .net-core asp.net-core

39
推荐指数
1
解决办法
9868
查看次数

在没有Microsoft.Office.Interop的情况下,将.NET doc和docx格式转换为.NET Core中的PDF

我需要在浏览器中显示Word .doc.docx文件.没有真正的客户端方式,出于法律原因,这些文档无法与Google文档或Microsoft Office 365共享.

浏览器无法显示Word,但可以显示PDF,因此我想在服务器上将这些文档转换为PDF然后显示.

我知道这可以使用Microsoft.Office.Interop.Word,但我的应用程序是.NET Core,并且无法访问Office互操作.它可以在Azure上运行,但它也可以在Docker容器中运行.

似乎有很多类似的问题,但大多数人都在询问全框架.NET或假设服务器是Windows操作系统,任何答案对我都没用.

如何转换.doc.docx文件.pdf 无法访问Microsoft.Office.Interop.Word

c# pdf ms-word .net-core

39
推荐指数
5
解决办法
3万
查看次数

使用CSS转换旋转表头文本

看起来应该可以使用以下内容:

.verticalText 
{           
    /* IE-only DX filter */
    writing-mode: tb-rl;
    filter: flipv fliph;

    /* Safari/Chrome function */
    -webkit-transform: rotate(270deg);

    /* works in latest FX builds */
    -moz-transform: rotate(270deg);
}
Run Code Online (Sandbox Code Playgroud)

这适用于IE.

它在Safari,Chrome和FX中以奇怪的方式出错 - 在文本旋转之前计算单元格的大小!

bug的截图

这是一个演示:http://jsfiddle.net/HSKws/

我使用动态图像作为解决方法,虽然这也存在问题.我很高兴作为一个后备,但似乎应该有一种方法来使这个CSS工作 - 它几乎就在那里.

任何人都知道在应用变换后让单元格适合内容的方法吗?

css cross-browser

35
推荐指数
4
解决办法
3万
查看次数

你能用C#做一个alpha透明的PNG吗?

我有一个显示垂直文本的多浏览器页面.

作为一个丑陋的黑客,让文本在所有浏览器中垂直渲染我创建了一个自定义页面处理程序,它返回一个垂直绘制文本的PNG.

这是我的基本代码(C#3,但对其他任何版本的细微更改为1):

Font f = GetSystemConfiguredFont();
//this sets the text to be rotated 90deg clockwise (i.e. down)
StringFormat stringFormat = new StringFormat { FormatFlags = StringFormatFlags.DirectionVertical };

SizeF size;
// creates 1Kx1K image buffer and uses it to find out how bit the image needs to be to fit the text
using ( Image imageg = (Image) new Bitmap( 1000, 1000 ) )
    size = Graphics.FromImage( imageg ).
        MeasureString( text, f, 25, stringFormat );

using ( Bitmap image = …
Run Code Online (Sandbox Code Playgroud)

.net c# gdi+

34
推荐指数
4
解决办法
4万
查看次数

你能在C#中使用通用表格吗?

您应该能够创建一个通用表单:

public partial class MyGenericForm<T> :
    Form where T : class
{
    /* form code */
    public List<T> TypedList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

是有效的C#,并编译.但是,如果您有任何图像表明它无法找到资源,那么设计器将无法工作,表单将抛出运行时异常.

我认为这是因为windows表单设计者假定资源将以简单类型的名称存储.

.net c# winforms

32
推荐指数
1
解决办法
1万
查看次数

nAnt是否仍然支持并适用于.net 3.5/VS2008?

我正在使用MSBuild构建我的东西.我想通过Build Server使用CruiseControl.net.

现在,CCNET对nAnt进行了大量的讨论,但看起来ccnet可以通过项目配置和msbuild完成大部分工作.此外,nAnt似乎有点不受支持,Beta版本已经差不多一年了.

简而言之:我实际上对MSBuild非常满意(特别是因为它是"官方"编译器前端)并且对nAnt有点不舒服,但我不想过早判断.

使用nAnt而不是MSBuild会有什么理由?特别是ccnet,在功能方面似乎与nant重叠(并添加了自动构建相关的东西)

.net msbuild nant .net-3.5

29
推荐指数
2
解决办法
3563
查看次数

比较Microsoft SQL Server中的日期的最佳方法是什么?

datetime在一个非常大的表中有一个SQL 字段.它已编入索引,需要进行查询.

问题是SQL总是存储时间组件(即使它始终是午夜),但搜索是在当天而不是时间.

declare @dateVar datetime = '2013-03-11;

select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
Run Code Online (Sandbox Code Playgroud)

不会返回任何内容,因为它t.[DateColumn]总是包含一个时间组件.

我的问题是围绕这个最好的方法是什么?

似乎有两组主要选择:

  1. 使用dateadd和创建第二个变量并使用between ... and>= ... and ... <=.

  2. 转换t.[DateColumn]为仅限日期的组件 - 我认为这将导致任何索引被忽略.

这两个看起来都非常混乱 - 我真的不想进行范围比较或扫描表格.

有没有更好的办法?

如果其中一个选项始终是最佳方式,那么如何以及为什么?

sql t-sql sql-server datetime query-optimization

28
推荐指数
2
解决办法
10万
查看次数

写入MVC 3+中的只读会话

我遇到过ASP会话的好奇行为.您可以强制控制器在用户会话之外 - 我希望能够执行此操作,以便可以同时执行多个请求并使用会话使它们连续执行.

禁用会话状态按预期工作:

[SessionState(SessionStateBehavior.Disabled)]
public class SampleController : Controller
{
    public ActionResult Test() 
    {
        // Access to the session should be denied
        object test = Session["test"];
        return Content(test);
    }
}
Run Code Online (Sandbox Code Playgroud)

转到〜/ Sample/Test会抛出一个System.Web.HttpException,如预期的那样.但是,只读会话似乎有点奇怪:

[SessionState(SessionStateBehavior.ReadOnly)]
public class SampleController : Controller
{
    public ActionResult Test() 
    {
        // Read from the session should be fine
        object test = Session["test"];
        return Content(test);
    }

    public ActionResult SetTest(string value) 
    {
        // Write to the session should fail 
        Session["test"] = value;

        // Read …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc session session-state asp.net-mvc-3

27
推荐指数
1
解决办法
7491
查看次数

扩展接口模式

.Net 3.5中的新扩展允许从接口拆分功能.

例如在.Net 2.0中

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }

    List<IChild> GetChildren()
}
Run Code Online (Sandbox Code Playgroud)

可以(在3.5中)成为:

public interface IHaveChildren {
    string ParentType { get; }
    int ParentId { get; }
}

public static class HaveChildrenExtension {
    public static List<IChild> GetChildren( this IHaveChildren ) {
        //logic to get children by parent type and id
        //shared for all classes implementing IHaveChildren 
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这对于许多接口来说是更好的机制.他们不再需要抽象基础来共享此代码,并且功能上代码的工作原理相同.这可以使代码更易于维护和更容易测试.

唯一的缺点是抽象基础实现可以是虚拟的,但可以解决(实例方法是否会隐藏具有相同名称的扩展方法?这会使代码混淆吗?)

没有经常使用这种模式的任何其他原因?


澄清:

是的,我看到扩展方法的趋势是到处都是它们.如果没有大量的同行评审,我会特别小心使用.Net值类型(我认为我们在字符串上唯一的一个是.SplitToDictionary()- 类似于.Split()但也采用键值分隔符)

我认为那里有一个完整的最佳实践辩论;-)

(顺便说一下:DannySmurf,你的PM听起来很可怕.)

我在这里特别询问使用扩展方法,以前我们有接口方法. …

c# extension-methods .net-3.5

24
推荐指数
3
解决办法
1万
查看次数