小编Chr*_*isO的帖子

LINQ递归查询返回分层的组集

给出以下模型的列表

public class Team
{
    public int TeamId { get; set; }
    public int ParentTeamId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个递归的linq查询,这将使我能够检索看起来像这样的层次结构

Team
    ChildTeams
Team
    Team
        ChildTeams
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法并看到了许多类似的问题,但没有一个能够帮我解决问题.我试过的最新尝试遵循以下几点:

private class TeamGrouping
{
    public int? ParentTeamId { get; set; }
    public IEnumerable<Team> ChildTeams { get; set; }
    public IEnumerable<TeamGrouping> Grouping { get; set; }
}

private IEnumerable<TeamGrouping> ToGrouping(IEnumerable<Team> teams)
{
    return teams.GroupBy(t => t.ParentTeamId, (parentTeam, childTeams) => new TeamGrouping {ParentTeamId = parentTeam, ChildTeams = childTeams});
}

private IEnumerable<TeamGrouping> ToGrouping(IEnumerable<TeamGrouping> teams)
{
    return …
Run Code Online (Sandbox Code Playgroud)

c# linq recursion

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

为什么 ts-loader 不编译我的打字稿?

我正在尝试使用 Webpack 使用 ts-loader 编译一些打字稿,但它没有按照我的预期运行 tsc。如果我对 ts 文件进行更改,webpack 不会将其编译回 js,如果我完全删除生成的 js 文件并重新运行 webpack,也会发生同样的情况。

Typescript 设置得很好,因为我可以运行./node_modules/typescript/bin/tsc并且它生成的 js 文件很好。我认为 ts-loader 应该针对我的 tsconfig.json 运行 tsc 是正确的吗?如果是这样,为什么它不接受更改并按预期生成我的 js?

正如你所看到的,我的入口点是./Client/boot-client.ts,甚至在通过 webpack 运行时也没有被编译。

我正在运行的具体 webpack 命令是:

./node_modules/webpack/bin/webpack.js --progress

给出以下输出

[0] building modulests-loader: Using typescript@2.2.2 and C:\git\coliver\couchtrace\Couchtrace.Web\tsconfig.json
[1] building modulests-loader: Using typescript@2.2.2 and C:\git\coliver\couchtrace\Couchtrace.Web\tsconfig.json
[1] Hash: 568887199c9c2bcbe47ec00669704990969dbee5
Version: webpack 2.3.2
Child
    Hash: 568887199c9c2bcbe47e
    Time: 20096ms
                 Asset    Size  Chunks                    Chunk Names
        main-client.js  554 kB       0  [emitted]  [big]  main-client
    main-client.js.map  859 kB       0  [emitted]         main-client …
Run Code Online (Sandbox Code Playgroud)

typescript webpack ts-loader

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

appsettings.json 中的 ClientSecret 与 IdentityServer4

我正在尝试让 IdentityServer4 使用 appsettings.json 指定混合授权类型的客户端密钥。

本文末尾说,如果我想将密钥放入 appsettings.json 中,我需要对其进行 sha256 哈希,然后对密钥进行 Base64 编码。因此,将秘密“秘密”放入https://emn178.github.io/online-tools/sha256.html中,得到“2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b”,其base64编码为“MmJiODBkNTM3YjFkYTNlMzhiZDM” wMzYxYWE4NTU2ODZiZGUwZWFjZDcxNjJmZWY2YTI1ZmU5N2JmNTI3YTI1Yg==”。这使得我的 mvc 客户端的 appsettings.json 看起来像这样

{
    ...
    "ClientSecrets": [ { 
        "Value": "MkJCODBENTM3QjFEQTNFMzhCRDMwMzYxQUE4NTU2ODZCREUwRUFDRDcxNjJGRUY2QTI1RkU5N0JGNTI3QTI1Qg=="
    } ],
    ...
}
Run Code Online (Sandbox Code Playgroud)

在 MVC 客户端上,配置如下所示

.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
{
    options.Authority = Configuration["OpenIdConnectAuthority"];

    options.ClientId = "xxx-mvc";
    options.ClientSecret = "secret";

    options.RemoteAuthenticationTimeout = TimeSpan.FromHours(2);
    options.ResponseType = "code id_token";
    options.RequireHttpsMetadata = !Environment.IsDevelopment();
    options.Scope.Clear();
    options.Scope.Add("openid profile");

    options.CallbackPath = new PathString("/signin-callback-oidc");
    options.SignedOutCallbackPath = new PathString("/signout-callback-oidc");
    options.SignedOutRedirectUri = new PathString("/");
    options.ClaimsIssuer = OpenIdConnectDefaults.AuthenticationScheme;

    options.TokenValidationParameters = new TokenValidationParameters
    { …
Run Code Online (Sandbox Code Playgroud)

asp.net-core identityserver4

6
推荐指数
2
解决办法
8089
查看次数

使用UI Automation和.net的Datagrid内容

我在使用UI自动化在外部应用程序中读取Datagrid的内容时遇到了一些麻烦,可能会使用一些指针.这是我到目前为止所拥有的:

int id = System.Diagnostics.Process.GetProcessesByName("Book")[0].Id;
AutomationElement desktop = AutomationElement.RootElement;

AutomationElement bw = desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ProcessIdProperty, id));

AutomationElement datagrid = bw.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "lv"));

AutomationElementCollection lines = datagrid.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem));

AutomationElementCollection items = lines[1].FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Custom));

GridItemPattern pattern = items[1].GetCurrentPattern(GridItemPattern.Pattern) as GridItemPattern;
TableItemPattern tablePattern = items[1].GetCurrentPattern(TableItemPattern.Pattern) as TableItemPattern;
Run Code Online (Sandbox Code Playgroud)

这可以在我可以从GridItemPattern和TableItemPattern访问列ID和行ID,但是如何访问该特定单元格中的值?它甚至可能吗?

谢谢.

.net c# datagrid ui-automation

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

IdentityServer4 signin-oidc 页面无限重定向到登录页面

我正在尝试在我的 MVC 应用程序上实现一个自定义登录按钮,该按钮将定向到 IdentityServer 进行登录,然后重定向回我的 MVC 应用程序。

要做到这一点,我使用的Microsoft.AspNetCore.Authentication.ChallengeAsync扩展方法对HttpContext我的Account/Login行动

public Task Login()
{
    return HttpContext.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme);
}
Run Code Online (Sandbox Code Playgroud)

请求被定向到 IDP 上的授权端点,用户可以登录并且请求被重定向到我的 MVC 应用程序上的 signin-oidc。正是在这一点上,signin-oidc 调用Account/Login动作并开始无限循环。

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:4500/Account/Login
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action methodLanding.Controllers.AccountController.Login (Landing) with arguments ((null)) - ModelState is Valid
info: Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler[12]
      AuthenticationScheme: OpenIdConnect was challenged.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action Landing.Controllers.AccountController.Login (Landing) in 11.9704ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 23.4211ms 302
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 POST https://localhost:4500/signin-oidc application/x-www-form-urlencoded 1488 …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-core identityserver4

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

使用Dispatcher.Invoke从WPF中的不同线程关闭窗口

我有一个问题,即使在查看有关Dispatcher.Invoke的各种信息之后我也无法解决.

有一个MainWindow创建任务,启动该任务,然后打开一个进度窗口.任务完成后,我需要关闭进度窗口.这就是我所拥有的:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        Task task = new Task(_vm.WriteToDB);
        task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);
        task.ContinueWith(RanToCompletion, TaskContinuationOptions.OnlyOnRanToCompletion);
        task.Start();

        _frmProgress = new Progress(task);
        _frmProgress.DataContext = _vm;
        _vm.ProgressText = "Connecting to update server...";
        _frmProgress.ShowDialog();
    }

    public void RanToCompletion(Task task)
    {
        Progress.FormCloseDelegate FormCloseDelegate = new Progress.FormCloseDelegate(_frmProgress.Close);

        if (_frmProgress.Dispatcher.CheckAccess())
            _frmProgress.Close();
        else
            _frmProgress.Dispatcher.Invoke(DispatcherPriority.Normal, FormCloseDelegate);
    }
Run Code Online (Sandbox Code Playgroud)

FormCloseDelegate在"进度"窗口中定义:

public delegate void FormCloseDelegate();
Run Code Online (Sandbox Code Playgroud)

使用上面的当前实现,代码编译并运行,但任务完成后不会关闭Progress表单.有任何想法吗?

我也愿意接受其他想法来解决这个问题.也许我完全走错了路.

谢谢.

.net c# wpf multithreading

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

SignalR MVC3网站和WPF客户端

我在IIS Express上设置了一个SignalR集线器,以及一个带有标准聊天示例应用程序的示例网站.它在浏览器中运行良好,我可以看到同时在不同浏览器上显示的消息.不幸的是,我遇到了类似在WPF中工作的障碍.

我已经将聊天示例设置为基础.最终,我将需要服务器将更新推送到所有连接的WPF客户端.有人能告诉我哪里出错了吗?

毂:

public class Chat : Hub
{
    public void Send(string message)
    {
        Clients.All.send(message);
    }
}
Run Code Online (Sandbox Code Playgroud)

WPF示例类:

public class ChatSample
{
    public ChatSample()
    {
        var hubConnection = new HubConnection("http://localhost:21638/");
        var proxy = hubConnection.CreateHubProxy("Chat");
        proxy.On<string>("send", Console.WriteLine);
        hubConnection.Start().Wait();
    }
}
Run Code Online (Sandbox Code Playgroud)

当前实现给出以下例外:

hubConnection.Start().Wait();

{"The remote server returned an error: (401) Unauthorized."}
Run Code Online (Sandbox Code Playgroud)

signalr signalr-hub

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

更优雅的方式在列上执行数学运算

有更优雅的方式这样做:

SELECT TOP (@NumOfGames) 
        (SUM(IIF(Fixture.HomeTeamID = @Team
            ,IIF(Fixture.Goals.FullTimeHomeGoals > Fixture.Goals.FullTimeAwayGoals
                    ,1 
                    ,IIF(Fixture.Goals.FullTimeHomeGoals < Fixture.Goals.FullTimeAwayGoals, 0, 0.5) 
                ) --IsHomeTeam
            ,IIF(Fixture.Goals.FullTimeAwayGoals > Fixture.Goals.FullTimeHomeGoals
                    ,1 
                    ,IIF(Fixture.Goals.FullTimeAwayGoals < Fixture.Goals.FullTimeHomeGoals, 0, 0.5) 
                ) --IsAwayTeam
        )) / @NumOfGames) * 100 AS Result
    FROM 
        Fixture.Fixture 
    INNER JOIN 
        Fixture.Goals ON Fixture.Goals.FixtureID  = Fixture.Fixture.FixtureID
    WHERE 
        HomeTeamID = @Team 
        OR 
        AwayTeamID = @Team 
Run Code Online (Sandbox Code Playgroud)

我非常讨厌SUM部分,必须有更好的方法来做到这一点.

用户输入@NumOfGames和@Team作为存储过程的参数.然后它会检查目标表,看看一支球队是赢了,是否赢了.胜利是1分,平局是0.5,损失是0.我想输出这些数字的总和,除以NumOfGames并乘以100得到成功率.

sql t-sql sql-server sql-server-2012

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

在_LogonPartial中显示模型数据

我正在使用新项目模板中的ASP MVC3,它给了我_Layout.cshtml和_LogOnPartial.cshtml.在_LogOnPartial中,有一个用户登录时显示的文本.如何在我的模型中显示我自己的附加数据并在所有视图中显示?

这是我尝试过的,但当然它没有用,因为没有模型数据:

@if(Request.IsAuthenticated) {
<text>Hello, <strong>@User.Identity.Name</strong>! - Account Balance: @Model.GetAccountBalance()
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
else {
@:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
}
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc-3

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

WPF MVVM在ViewModel中存储用户控件?一个大禁忌?

我试图在我的主窗口中托管用户控件,但我很难决定如何将它实现到我的视图模型中.

首先,我为用户控件创建了一个单独的视图模型,并在将其托管到以下内容之前使用数据模板将其映射到控件ContentControl:

数据模板:

<DataTemplate DataType="{x:Type viewModels:TaskbarIconViewModel}">
    <tb:TaskbarIcon/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

XAML:

<ContentControl Content="{Binding TaskbarIconViewModel}"/>
Run Code Online (Sandbox Code Playgroud)

如果我要使用此设置,我将如何调用用户控件上的方法以及如何在XAML或视图模型中设置用户控件的属性?

其次,我有想法在视图模型中保持用户控件,然后再将其绑定到一个ContentControl.这对我和MVVM来说似乎不对.这是正确的吗?在视图模型中保持控件是否可以接受?

在视图模型中:

public TaskbarIcon TaskbarIcon { get; set; }
Run Code Online (Sandbox Code Playgroud)

XAML:

<ContentControl Content="{Binding TaskbarIcon}"/>
Run Code Online (Sandbox Code Playgroud)

什么是最好的行动方案?

c# wpf mvvm

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

Mapbox iOS setVisibleCoordinates行为异常

我在不同屏幕尺寸的ios中使用Mapbox在显示爱尔兰固定地图时遇到了一些麻烦。MGLMapView.setVisibleCoordinates似乎是我需要的,但是却没有我期望的那样。我希望传递左下角的坐标和右上角的坐标,并定义一个要显示的矩形,而不管屏幕尺寸如何。

mapView.setVisibleCoordinates([CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)], count: 2, edgePadding: UIEdgeInsets.zero, animated: false)

我也尝试过

mapView.setVisibleCoordinateBounds(MGLCoordinateBounds(sw: CLLocationCoordinate2D(latitude: 50.347676, longitude: -11.444362), ne: CLLocationCoordinate2D(latitude: 56.375322, longitude: -4.128659)), edgePadding: UIEdgeInsets.zero, animated: false)

得到的结果如下图所示。如您所见,iphone 5s的布局是完美的,但我希望上面的代码在ipad上显示相同的视图,但是会缩小太多。如何在设备之间显示相同的视图?

iPad

iPhone 5S

ios mapbox mapbox-gl

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

从字符串中抓取"$#"的所有正则表达式匹配项

我有一个字符串,其中包含一个美元符号后跟一个正数的多个实例.我需要使用正则表达式获取每个实例.

这是一个字符串的示例:

"This that $1 who $2"
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止使用vb.net的内容:

Dim wordSplitMatches As Match = Regex.Match("This that $1 who $2", "(\$\d+)+")
Run Code Online (Sandbox Code Playgroud)

这非常适合抓住1美元,但我如何设置它以便我得到多个包含所有匹配的组?

这是目前的输出:

? wordsplitmatches.groups(1).value
"$1"
? wordsplitmatches.groups(2).value
""
Run Code Online (Sandbox Code Playgroud)

.net regex vb.net

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

从 ObservableCollection 中删除 null 项

我在使用以下代码时遇到了一些问题:

AllAgents.CollectionChanged += (sender, e) =>
            {
                if (e.Action != NotifyCollectionChangedAction.Remove) return;

                foreach (var s in AllSnapshots)
                {
                    foreach (var stat in s.Stats.Where(stat => stat.Model.Agent == null))
                        s.Stats.Remove(stat);
                }
            };
Run Code Online (Sandbox Code Playgroud)

当然,这会抛出“集合已修改;枚举操作可能无法执行”。例外对我来说完全有意义。问题是,从 ObservableCollection 中删除 Model.Agent 属性为 null 的所有项目的最佳方法是什么?我也愿意接受其他解决方案,本质上,当从 AllAgents 集合中删除代理时,我需要从 AllSnapshots.Stats 集合中删除引用该代理的所有条目。

.net c#

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