给出以下模型的列表
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) 我正在尝试使用 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) 我正在尝试让 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) 我在使用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,但是如何访问该特定单元格中的值?它甚至可能吗?
谢谢.
我正在尝试在我的 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) 我有一个问题,即使在查看有关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表单.有任何想法吗?
我也愿意接受其他想法来解决这个问题.也许我完全走错了路.
谢谢.
我在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) 有更优雅的方式这样做:
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得到成功率.
我正在使用新项目模板中的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) 我试图在我的主窗口中托管用户控件,但我很难决定如何将它实现到我的视图模型中.
首先,我为用户控件创建了一个单独的视图模型,并在将其托管到以下内容之前使用数据模板将其映射到控件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)
什么是最好的行动方案?
我在不同屏幕尺寸的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上显示相同的视图,但是会缩小太多。如何在设备之间显示相同的视图?
我有一个字符串,其中包含一个美元符号后跟一个正数的多个实例.我需要使用正则表达式获取每个实例.
这是一个字符串的示例:
"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) 我在使用以下代码时遇到了一些问题:
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 集合中删除引用该代理的所有条目。
c# ×5
.net ×4
asp.net-core ×2
wpf ×2
asp.net ×1
asp.net-mvc ×1
datagrid ×1
ios ×1
linq ×1
mapbox ×1
mapbox-gl ×1
mvvm ×1
recursion ×1
regex ×1
signalr ×1
signalr-hub ×1
sql ×1
sql-server ×1
t-sql ×1
ts-loader ×1
typescript ×1
vb.net ×1
webpack ×1