小编Ron*_*erg的帖子

在递归SQL表中查找最低公共父级

假设我有一个递归表(例如,有经理的员工)和一个0..nid 大小列表.如何找到这些ID的最低公共父级?

例如,如果我的表看起来像这样:

Id | ParentId
---|---------
 1 |     NULL
 2 |        1
 3 |        1
 4 |        2
 5 |        2
 6 |        3
 7 |        3
 8 |        7
Run Code Online (Sandbox Code Playgroud)

然后以下几组ID导致以下结果(第一个是角落情况):

[]      => 1 (or NULL, doesn't really matter)
[1]     => 1
[2]     => 2
[1,8]   => 1
[4,5]   => 2
[4,6]   => 1
[6,7,8] => 3
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

编辑:请注意,在所有情况下,父级都不是正确的术语.它是树中所有路径中的最低公共节点.最低公共节点也可以是节点本身(例如,在这种情况下[1,8] => 1,节点1不是节点的父节点1而是节点1本身).

亲切的问候,罗纳德

sql t-sql sql-server recursion common-table-expression

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

真相表作为字典的键

我有六个相互独立的布尔标志,因此有64种可能的组合.这些标志应该确定某些字符串的值.该字符串可以有七个不同的值.我认为将它作为一个大的if语句实现是一个坏主意所以我想创建一个真值表,其中每个组合确定一个特定的结果:

Key            Value
0,0,0,0,0,0 -> "A"
0,0,0,0,0,1 -> "A"
0,0,0,0,1,0 -> "B"
0,0,0,0,1,1 -> "C"
0,0,0,1,0,0 -> "A"
...
Run Code Online (Sandbox Code Playgroud)

这看起来非常像字典,但最好的关键实现是什么(在C#中)?最小的可能键是byte我将选项掩盖到的.但是,这不会提高我的代码的可读性.

还有其他解决方案吗?

c# algorithm dictionary

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

Perl 打印“$(”

我刚刚开始学习 Perl,我(意外地)遇到了这种print我无法解释的行为。如果我做:

print "$(";
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:

1000 4 20 24 25 27 29 30 44 46 117 1000 1001
Run Code Online (Sandbox Code Playgroud)

perl

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

反射找到嵌套类?

我有一个看起来像这样的类:

public class Parent
{
    public class Subclass
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用反射我试图找到子类

void main
{
    Parent p = new Parent();
    Type t = p.GetType();
    Type s = t.GetNestedType("Subclass"); //s is not set
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为显然没有嵌套类型。如何找到子类的类型?我需要获取 s 的原因是稍后调用 .GetMethod("someMethod").Invoke(...) 。

c# reflection

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

消除结果集中的部分重复行

我有一个返回类似于下面的结果集的查询(实际上它是更大,数千行):

     A    | B  | C  |    D
     -----|----|----|-----
1    NULL | d0 | d0 | NULL
2    NULL | d0 | d1 | NULL
3    NULL | d0 | d2 |   a0
4      d0 | d1 | d1 | NULL
5      d0 | d2 | d2 |   a0

其中两行被认为是重复的,1和2,因为A,B和D是相同的.为了消除这种情况,我可以使用,SELECT DISTINCT A, B, D但后来我的结果集中没有C列.C列是第3,4和5行的必要信息.

那么我如何从上面的结果集到这个结果集(C4中出现的结果也可以NULL代替d1):

     A    | B  | C    | D
     -----|----|------|-----
1    NULL | d0 | NULL | NULL
3    NULL | …

sql t-sql sql-server

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

F#List.scan中的初始状态

我有一个简单的问题,因为我是一个F#新手,我似乎无法弄清楚如何做到这一点.我有一个元组列表:

let l = [ (a, 2); (b, 3); (c, 2); (d, 6) ]
Run Code Online (Sandbox Code Playgroud)

我想转变成这个:

let r = [ (a, 2); (b, 5); (c, 7); (d, 13) ]
Run Code Online (Sandbox Code Playgroud)

这只是在每个元组中添加第二个元素的值:2 + 3 + 2 + 6.这些对象a,b,cd复杂的对象,我只是想保持.

我以为我应该用List.scan它.它需要一个列表,通过计算线程累加器并返回一个列表:

let r = l |> List.scan (fun (_, s) (o, i) -> (o, s + i)) (??, 0) |> List.tail
Run Code Online (Sandbox Code Playgroud)

但我不知道要填写哪些问号.我对初始状态不感兴趣,除了0.而且我不想指定第一个元组元素的某个"空"实例.

或者有更简单的方法吗?

f#

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

重复项目列表时,在ASP.NET MVC3中生成不同的客户端ID

我有一个ASP.NET MVC3 Razor视图,它为jQuery UI手风琴中的客户列表呈现编辑器.目前,在呈现的html中,类似客户属性的所有客户端ID都是相同的.出于显而易见的原因,我想改变这一点.

我的主要观点如下:

<div id="accordionKlanten">
@foreach (var customer in Model.Customers)
{
    <h3><a href="#">@customer.Name</a></h3>
    <div>@{ Html.RenderPartial("CustomerData", customer); }</div>
}
</div>
Run Code Online (Sandbox Code Playgroud)

在我CustomerData看来(大大简化):

@using (Ajax.BeginForm("UpdateCustomer", ajaxOptions))
{
    @Html.LabelFor(model => model.Name)
    @Html.TextBoxFor(model => model.Name)
    <input type="submit" value="Opslaan" />
}
Run Code Online (Sandbox Code Playgroud)

这一切都很完美:我可以发布到我的UpdateCustomeraction方法,绑定模型对象并返回一个部分视图,该视图将呈现给客户端.

但是,当我有三个客户时,这会在我的html中呈现三个输入字段id="Name".出现问题的一个原因是它<label for="Name">...</label>不起作用,因为Name它不是唯一的id.

有没有办法告诉ASP.NET MVC3渲染不同id的(虽然保持name属性完整,因为这些属性用于绑定到模型)?

为了完整起见,这里涉及两种行动方法:

// Returns view that renders editor for each customer.
public ActionResult Index()
{
    var customers = _customerService.GetCustomers();
    return View(new CustomersViewModel { Customers = …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc razor asp.net-mvc-3

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

如何从域名DNS名称获取域名sid?

我有一个Active Directory域的DNS名称,我想获得该域的域名sid.我怎样才能做到这一点?

我已经有以下内容:

var domainContext =
    new DirectoryContext(DirectoryContextType.Domain, domainDnsName);
var domain = Domain.GetDomain(domainContext);
var dc = domain.DomainControllers.OfType<DomainController>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但我有点被困在哪里(也许我跟着错误的路线).

directoryservices active-directory

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

VS2010中linq-to-sql dbml文件中的奇怪映射错误

由于我每天都会多次切换到VS2010,因此我的dbml文件中出现了编译错误:

DBML1005: Mapping between DbType 'bigint' and Type
'MyNamespace.SecurityToken' in Column 'SecurityToken' of Type
'Employee' is not supported
Run Code Online (Sandbox Code Playgroud)

当我重新启动VS2010时,错误消失.使用此dbml文件运行我的应用程序没有问题(具体来说,在对象的SecurityToken属性中获取正确的值没有问题Employee).

SecurityToken属性的枚举类型定义如下:

[Flags]
public enum SecurityToken : long
{
    None = 1,
    Admin = 2,
    ......
}
Run Code Online (Sandbox Code Playgroud)

SecurityToken数据库中的列是类型bigint.

我错过了什么吗?特别奇怪的是,当我编写与LINQ模型完全无关的代码时,错误只会发生.

c# visual-studio-2010 linq-to-sql

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

尽管有TryCatch活动,但异常会从工作流中逃脱

我在Windows服务中有一个工作流,它是一个定期执行工作的循环.这项工作是在一项TryCatch活动中完成的.该Try属性是一个TransactionScope活动,它包含一些读取和更新数据库的自定义活动.当事务失败时,我会指望任何导致它被捕获的异常TryCatch.但是,我的工作流程中止了.我的工作流程如下:

var wf = new While(true)
{
    Body = new Sequence
    {
        Activities =
        {
            new TryCatch
            {
                Try = new TransactionScope
                {
                    IsolationLevel = IsolationLevel.ReadCommitted,
                    Body = new Sequence
                    {
                        Activities = { ..custom database activities.. }
                    },
                    AbortInstanceOnTransactionFailure = false
                },
                Catches =
                {
                    new Catch<Exception>
                    {
                        Action = new ActivityAction<Exception>
                        {
                            Argument = exception,
                            Handler = ..log error..
                        }
                    }
                }
            },
            new Delay { Duration = new InArgument<TimeSpan>(duration) …
Run Code Online (Sandbox Code Playgroud)

c# transactions .net-4.0 workflow-foundation workflow-foundation-4

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