假设我有一个递归表(例如,有经理的员工)和一个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本身).
亲切的问候,罗纳德
我有六个相互独立的布尔标志,因此有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我将选项掩盖到的.但是,这不会提高我的代码的可读性.
还有其他解决方案吗?
我刚刚开始学习 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) 我有一个看起来像这样的类:
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(...) 。
我有一个返回类似于下面的结果集的查询(实际上它是更大,数千行):
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 | … 我有一个简单的问题,因为我是一个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,c和d复杂的对象,我只是想保持.
我以为我应该用List.scan它.它需要一个列表,通过计算线程累加器并返回一个列表:
let r = l |> List.scan (fun (_, s) (o, i) -> (o, s + i)) (??, 0) |> List.tail
Run Code Online (Sandbox Code Playgroud)
但我不知道要填写哪些问号.我对初始状态不感兴趣,除了0.而且我不想指定第一个元组元素的某个"空"实例.
或者有更简单的方法吗?
我有一个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) 我有一个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)
但我有点被困在哪里(也许我跟着错误的路线).
由于我每天都会多次切换到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模型完全无关的代码时,错误只会发生.
我在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
c# ×4
sql ×2
sql-server ×2
t-sql ×2
.net-4.0 ×1
algorithm ×1
asp.net-mvc ×1
dictionary ×1
f# ×1
linq-to-sql ×1
perl ×1
razor ×1
recursion ×1
reflection ×1
transactions ×1