小编Rob*_*nik的帖子

C#字符串中字符的第三个索引

是否有一个命令可以获取字符串中字符的第三个索引?例如:

error: file.ext: line 10: invalid command [test:)]
Run Code Online (Sandbox Code Playgroud)

在上面的句子中,我想要第3个冒号的索引,10个旁边的那个.我怎么能这样做?我知道string.IndexOf和string.LastIndexOf,但在这种情况下我想得到第三次使用时字符的索引.

.net c# string indexing

11
推荐指数
2
解决办法
3万
查看次数

使用SQL Server命名参数与ExecuteStoreQuery和ExecuteStoreCommand

我试图使用SQL Server命名参数ObjectContext.ExecuteStoreQueryObjectContext.ExecuteStoreCommand直接调用存储过程或函数.

SQL Server命名参数与实体框架命名参数不同 - 它们允许我执行与此类似的查询:

EXEC sp_GetData @firstParameter = 1, @thirdParameter = 2, @secondParameter = 1
Run Code Online (Sandbox Code Playgroud)

此查询中的参数顺序无关紧要,而与按顺序计算的实体框架命名参数相反.

我想在实体框架中使用SQL Server命名参数,以便在存储过程中更改参数的顺序时,调用它的实体框架代码不会受到影响.

sql-server entity-framework

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

AngularJS:根据用户是否获得授权,使用angularjs保护路由?

我刚刚开始使用AngularJS我正在开发的应用程序,一切进展顺利但我需要一种保护路由的方法,以便在没有登录时不允许用户进入该路由.我理解的重要性在服务方面也要保护,我会照顾这个.

我找到了许多保护客户端的方法,似乎使用了以下内容

$scope.$watch(
    function() {
        return $location.path();
    },
    function(newValue, oldValue) {
        if ($scope.loggedIn == false && newValue != '/login') {
            $location.path('/login');
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

我在哪里需要把这个,在.runapp.js

我找到的另一种方法是使用指令并使用on-routechagestart

信息在这里 http://blog.brunoscopelliti.com/deal-with-users-authentication-in-an-angularjs-web-app

我真的对任何人的推荐方式的帮助和反馈感兴趣.

angularjs angularjs-directive angularjs-scope

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

重写继承方法时避免使用显式类型转换

我有一个基本抽象类,也实现了一个特定的接口.

public interface IMovable<TEntity, T>
    where TEntity: class
    where T: struct
{
    TEntity Move(IMover<T> moverProvider);
}

public abstract class Animal : IMovable<Animal, int>
{
    ...

    public virtual Animal Move(IMover<int> moverProvider)
    {
        // performs movement using provided mover
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我继承了一些类,其中一些必须覆盖基类的接口实现方法.

public class Snake : Animal
{
    ...

    public override Animal Move(IMover<int> moverProvider)
    {
        // perform different movement
    }
}
Run Code Online (Sandbox Code Playgroud)

我的接口方法在移动后返回相同的对象实例,因此我可以使用链接或直接在return语句中执行某些操作而不使用其他变量.

// I don't want this if methods would be void typed
var s = GetMySnake();
s.Move(provider); …
Run Code Online (Sandbox Code Playgroud)

c# generics inheritance interface-implementation

11
推荐指数
1
解决办法
1048
查看次数

根据外部因素验证对象(即数据存储唯一性)

描述

我的解决方案有这些项目:

  • DAL =修改后的实体框架
  • DTO =能够验证自己的数据传输对象
  • BL =业务层服务
  • WEB =演示Asp.net MVC应用程序

DAL,BL和WEB都参考了很棒的DTO.
该过程通常以这种方式执行:

  1. 向WEB发出Web请求
  2. WEB获得DTO发布
    • DTO通过自定义ActionFilter自动验证
    • 验证错误是自动收集的
  3. (验证是可以的)WEB调用BL提供DTO
  4. BL通过使用DTO调用DAL(可以通过它们或只是使用它们)

那么DTO验证问题......

我的DTO能够根据自己的状态(属性值)验证自己.但是现在我遇到了问题,但事实并非如此.我需要他们使用BL(以及因此DAL)进行验证.

我的现实生活中的例子:用户注册和WEB获得验证的用户DTO.有问题的部分是username验证.应根据数据存储检查其唯一性.
我该怎么做?

还有其他信息表明所有DTO都实现了IoC和TDD 的接口(即UserDTO实现IUser).两者都是DTO项目的一部分.

不可能尝试

  1. 我无法在DTO中引用BL,因为我将获得循环引用.
    Compilation error
  2. 我无法创建一个额外的DTO.Val项目,它将引用部分DTO类并在那里实现它们的验证(它们引用BL + DTO).
    Partial classes can't span assemblies.

可能的尝试

  1. 创建一个特殊的ActionFilter,可以根据外部条件验证对象.这个将在WEB项目中创建,因此可以看到将在此处使用的DTO和BL.
  2. 将DTO放在BL中并将DTO接口保持为其他项目引用的实际DTO,并重构所有代码以使用接口而不是具体类.
  3. 不处理外部依赖验证,并让外部依赖项抛出异常 - 可能此问题的最糟糕的解决方案

你会建议什么?

validation asp.net-mvc xval data-annotations

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

我们可以使用Skip(),Take()和OrderBy()来控制LINQ表达式顺序吗?

我正在使用LINQ to Entities来显示分页结果.但我在使用的组合问题Skip(),Take()OrderBy()调用.

一切正常,除了OrderBy()分配得太晚.之后的结果集已被削减它的执行Skip()Take().

因此,每个结果页面都按顺序排列.但是,对一页数据进行排序,而不是对整个集合进行排序,然后使用Skip()和限制这些记录Take().

如何设置这些语句的优先级?

我的例子(简化)

var query = ctx.EntitySet.Where(/* filter */).OrderByDescending(e => e.ChangedDate);
int total = query.Count();
var result = query.Skip(n).Take(x).ToList();
Run Code Online (Sandbox Code Playgroud)

一种可能(但不好)的解决方案

一种可能的解决方案是将聚簇索引应用于按列排序,但此列经常更改,这会降低插入和更新时的数据库性能.我真的不想那样做.

编辑

我运行ToTraceString()了我的查询,我们实际上可以看到order by应用于结果集.不幸的是最后.:(

SELECT 
-- columns
FROM  (SELECT 
    -- columns
    FROM   (SELECT -- columns
        FROM ( SELECT 
            -- columns
            FROM table1 AS Extent1
            WHERE  EXISTS (SELECT 
                -- single constant column
                FROM table2 AS Extent2
                WHERE (Extent1.ID = …
Run Code Online (Sandbox Code Playgroud)

mysql linq linq-to-entities devart dotconnect

10
推荐指数
1
解决办法
3312
查看次数

高级:如何优化我的复杂O(n²)算法

我有人和地方数据如下:

  • Person 实体有
    • IList<DateRangePlaces> 每个人都有
      • IList<Place> 可能的地方
    • Schedule日模式为ie.10天可用4不可用

在特定的DateRangePlaces日期范围内,人们必须遵守模仿Schedule人是否可以去某个特定的地方.

  • Place 实体有
    • IList<DateRangeTiming> 每个定义每个日期范围内的开/关时间

重叠日期范围可用作LIFO.因此,对于之前已经定义的每一天,新的时间定义都会优先考虑.

问题

现在我需要做这样的事情(在伪代码中):

for each Place
{
    for each Day between minimum and maximum date in IList<DateRangeTiming>
    {
        get a set of People applicable for Place and on Day
    }
}
Run Code Online (Sandbox Code Playgroud)

这意味着执行我的任务的步骤数约为:

Σ (地方)(天) ×Σ (人))

这对我的理解是

O(x×y x ×z)

并且可能与此算法的复杂性近似:

O(n 3)

我不是理论专家,所以你可以自由地纠正我的假设.真实的是,这种复杂性绝对是不可接受的,特别是考虑到我将在很多地方和人的长日期范围内运作.

从公式近似中我们可以看到人集会被多次迭代.因此,我想至少优化这一部分.为了缓解事情,我改变了一点

Person.IList<DateRangePlaces>.IList<Place>
Run Code Online (Sandbox Code Playgroud)

Person.IList<DateRangePlaces>.IDictionary<int, Place>
Run Code Online (Sandbox Code Playgroud)

无论一个人是否可以在特定日期到某个地方,这会给我一个更快的结果,因为我只会检查是否Place.Id存在于字典中而不是IList.Where()每次都必须扫描整个列表的LINQ子句.

  1. 您是否可以建议我可以在算法中实现任何其他优化,以使其更快,甚至在大O符号方面使其更简单?

  2. 您将使用哪种内存结构类型(列表,字典,堆栈,队列......)来提高性能?

附录:整个问题更加复杂 …

c# big-o iterator

10
推荐指数
1
解决办法
226
查看次数

自定义Asp.net MVC 3编辑器模板未被使用

我有一个使用Razor视图引擎的MVC 3 Web应用程序.我想扩展默认编辑器模板,所以我想将其他HTML5属性添加到input元素中autofocus.

AdditionalMetadataAttribute用来指定我的实体上的某些属性是自动聚焦:

public class MyEntity
{
    public int Id { get; set; }

    [Required]
    [AdditionalMetadata("autofocus", true)]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    ...
}
Run Code Online (Sandbox Code Playgroud)

由于视图脚手架使用EditorFor方法我决定一起玩,并希望覆盖默认的String.cshtml模板,以便它还可以添加任何其他元数据作为属性.玩游戏意味着我不想使用TextBoxFor我可以控制输入属性的地方.

这是我略微更改的String.cshtml,它将所有其他元数据属性添加为输入HTML属性:

@{
    // System.Diagnostics.Debugger.Break();
    this.ViewData.ModelMetadata.AdditionalValues.Add("class", "text-box single-line");
}
@Html.TextBox(string.Empty, ViewContext.ViewData.TemplateInfo.FormattedModelValue, this.ViewData.ModelMetadata.AdditionalValues)
Run Code Online (Sandbox Code Playgroud)

此模板应input type=text使用相同的CSS类进行相同的渲染,但如果提供了任何其他属性,则还应使用其他属性.

然后我把这个文件放在〜/ Views/Shared/EditorTemplates /文件夹中,但似乎这个模板永远不会被拾取,因为我得到的只是默认的输入文本框.

我究竟做错了什么?

string html5 editortemplates razor asp.net-mvc-3

10
推荐指数
1
解决办法
5872
查看次数

Web API 2/MVC 5:属性路由将参数作为查询字符串传递,以在同一控制器上定位不同的操作

我一直在使用新的Web API 2(看起来非常有前途)但我有点头疼让一些路线工作.当我有GetAllUsers/GetUser(int id)时,一切正常,但是当我添加GetUserByName(字符串名称)和/或GetUserByUsername(字符串用户名)时,事情开始令人毛骨悚然.我知道int将是第一个,我可以重新排序路线,但让我们想象下面的场景:

用户可以拥有有效username=1234name=1234(我知道它不太可能但我们需要防止任何可能的情况)并且我们可能在数据库中具有有效的1234 ID并且所有路由将被混淆.

也许这是我们需要在新的WebAPI 2上使用的东西,所以我想我可以带来一个"解决方法",将过滤器作为查询字符串传递给同一控制器中的不同操作,例如api/users/?username=1234(GetUserByUsername)或api/users/?name=1234(GetUserByName)

但我不能让查询字符串通过......实际上上面的任何查询字符串选项都被GetAllUsers捕获.

有没有人对这种情况有任何建议/解决方案?

非常感谢

c# asp.net-mvc asp.net-web-api asp.net-web-api-routing asp.net-mvc-5

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

截断文本块末尾的HTML内容(块元素)

主要是当我们缩短/截断文本内容时,我们通常只是在特定字符索引处截断它.无论如何,HTML已经很复杂,但我想div使用不同的措施截断我的HTML内容(使用内容可编辑生成):

  1. 我将定义N将用作截断起始点限制的字符索引
  2. 算法将检查内容是否至少为N字符长(仅文本;不计算标签); 如果不是,它将只返回整个内容
  3. 然后,它将从检查N-XN+X字符位置(文字只)并搜索块的节点的端部; X是预定义的偏移值,可能N/5N/4;
  4. 如果多个块节点在此范围内结束,则算法将选择最接近限制索引的那个节点 N
  5. 如果没有块节点在此范围内结束,则它将在相同范围内找到最接近的字边界,并选择最接近N并在该位置截断的索引.
  6. 使用有效的HTML返回截断的内容(所有标记在结尾处关闭)

我的内容可编辑生成的内容可能包含段落(带换行符),预先格式化的代码块,块引号,有序和无序列表,标题,粗体和斜体(它们是内联节点,不应计入截断过程)等.实现当然会定义哪些元素特别是可能的截断候选者.标题即使它们是块HTML元素也不会被视为截断点,因为我们不需要寡居标题.段落,列出单个项目,整个有序和无序列表,块引号,预格式化块,无效元素等都是好的.标题和所有内联块元素都不是.

让我们把这个stackoverflow问题作为我想要截断的HTML内容的一个例子.我们将截断限制设置为1000,偏移量为250个字符(1/4).

此DotNetFiddle显示此问题的文本,同时还在其中添加限制标记(|MIN|表示字符750,|LIMIT|表示字符1000 |MAX|,表示字符1250).

从示例中可以看出,两个块节点与字符1000之间最接近的截断边界</OL>和之间P(我的内容可编辑生成...).这意味着我的HTML应该在这两个标记之间被截断,这将导致内容文本明智地少于1000个字符,但保持截断的内容有意义,因为它不会在某些文本段落的某个地方截断.

我希望这能解释事情应该如何与这个算法相关.

问题

我在这里看到的第一个问题是我正在处理像HTML这样的嵌套结构.我还必须检测不同的元素(只有块元素,没有内联元素).最后但并非最不重要的是,我将只计算字符串中的某些字符并忽略那些属于标记的字符.

可能的解决方案

  1. 我可以通过创建表示内容节点及其层次结构的对象树来手动解析我的内容
  2. 我可以将HTML转换为更容易管理的内容,如markdown,然后只需搜索最接近我提供的索引的新行N并转换回HTML
  3. 使用类似HTML Agility Pack的东西,用它替换我的#1解析,然后以某种方式使用XPath来提取块节点并截断内容

第二个想法

  • 我确信我可以通过做#1做到这一点,但感觉我正在重新发明轮子.
  • 我不认为#2有任何C#库,所以我也应该手动对Markdown进行HTML操作,或者将pandoc作为外部进程运行.
  • 我可以使用HAP,因为它非常适合操作HTML,但我不确定我的截断是否足够简单.我担心在我的自定义代码中,大部分处理仍然在HAP之外

如何处理这种截断算法?我的头似乎太累了,无法达成共识(或解决方案).

html c# truncate extract

10
推荐指数
1
解决办法
966
查看次数