当IN子句的值列表来自业务逻辑时,使用Dapper ORM使用IN子句编写查询的最佳方法是什么?例如,假设我有一个查询:
SELECT *
FROM SomeTable
WHERE id IN (commaSeparatedListOfIDs)
Run Code Online (Sandbox Code Playgroud)
它commaSeparatedListOfIDs是从业务逻辑传入的,它可以是任何类型的IEnumerable(of Integer).在这种情况下,我将如何构造查询?我是否必须做到目前为止我一直在做的事情,这基本上是字符串连接,还是有一些我不知道的高级参数映射技术?
好的,在我们的项目中,我使用的是System.Linq.Dynamic库,但我注意到我无法完成以下操作:
myDataSource.OrderByDescending( "someColumnName")
因为我收到以下错误:
重载解析失败,因为无法使用这些参数调用可访问的OrderByDescending ...
似乎Library只支持OrderBy("someColumnName").是否有这样的原因,如果我想按降序重新排序记录,我将如何绕过这个问题?我是否必须使用Reverse()例如OrderBy("someColumnName").Reverse()?看起来像一个黑客......
任何建议将不胜感激...
我正在开发一个需要同时支持同一逻辑/方法的异步和同步版本的项目。所以例如我需要有:
public class Foo
{
public bool IsIt()
{
using (var conn = new SqlConnection(DB.ConnString))
{
return conn.Query<bool>("SELECT IsIt FROM SomeTable");
}
}
public async Task<bool> IsItAsync()
{
using (var conn = new SqlConnection(DB.ConnString))
{
return await conn.QueryAsync<bool>("SELECT IsIt FROM SomeTable");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这些方法的异步和同步逻辑在各方面都是相同的,除了一个是异步的,另一个不是。在这种情况下,是否有合法的方法来避免违反 DRY 原则?我看到有人说你可以在异步方法上使用 GetAwaiter().GetResult() 并从你的同步方法调用它?该线程在所有情况下都安全吗?有没有另一种更好的方法来做到这一点,还是我被迫复制逻辑?
我正在尝试为我正在处理的项目设置浏览器通知.我到目前为止的代码是:
// Notification permissions logic handled before...
var notification = new Notification('Title', { body: 'Message' });
notification.onclick = function (e) {
window.focus();
// this.cancel();
};
setTimeout(notification.close.bind(notification), 5000);
Run Code Online (Sandbox Code Playgroud)
除了一件事,通知可以正常使用此代码.在Chrome中,点击通知不会将焦点设置在浏览器窗口中.在Firefox中,这种行为是开箱即用的,并且在没有上面定义的点击处理程序的情况下工作正常.我为Chrome寻找了解决方案,并找到了以下内容:
然而,建议接受的解决方案对我不起作用 - 事件被触发但未设置焦点.
有没有人有任何建议如何使这种行为正常?
Chrome版本:版本44.0.2403.130米
Firefox版本:40.0
我在类中定义了以下方法:
public bool LogOff(string sessionId)
{
int res;
// Some non related code here..
if (res == 1)
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
对我来说很奇怪的是,我在IF子句中获得了"在访问Visual Studio之前可能没有初始化本地变量"错误(我安装了ReSharper).当"res"是一个值类型时,为什么会这样,因此默认为0?我应该指出,如果我专门将res的值设置为0,那么一切都OK.
我在这里错过了什么?我认为这些是编程的基础,但显然我不熟悉基础知识......
我最近在我的项目中添加了jquery.dataTables nuget包,我想在BundleConfig中捆绑必要的文件.由于此软件包安装在Scripts文件夹中的"DataTables-1.9.4"文件夹中,因此我在BundlesConfig中添加了以下行:
bundles.Add(new ScriptBundle("~/bundles/dataTables").Include(
"~/Scripts/DataTables-{version}/media/js/jquery.dataTables.js"));
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
System.Web.Optimization.dll中出现"System.ArgumentException"类型的异常,但未在用户代码中处理
当我将该行修改为:
bundles.Add(new ScriptBundle("~/bundles/dataTables").Include(
"~/Scripts/DataTables-1.9.4/media/js/jquery.dataTables.js"));
Run Code Online (Sandbox Code Playgroud)
它工作得很好.
所以我的问题是如何在JQuery包的情况下注入版本?这是在包本身的某个地方定义的,有没有办法让我解决这个问题?我讨厌每次更新dataTables nuget包时都必须更改我的bundle配置的想法...
在标准linq中,当我使用lambdas时,我可以执行以下操作:
var x = _usersService.GetAll().OrderBy(u => u.LastName).ThenBy(u => y.FirstName).ThenBy(u => u.UserId)
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我使用System.Linq.Dynamic dll时,我该怎么做?我知道我能做到:
var x = _usersService.GetAll().OrderBy("LastName")
Run Code Online (Sandbox Code Playgroud)
但是如何通过子句定义附加顺序?
我有一个用 .net core MVC 编写的 Web 应用程序,这是一个使用模型/视图/控制器模式的标准“老派”Web 应用程序。在这个应用程序中,我有一些复杂的表单,它们会根据用户的选择而改变。根据用户在前几个下拉列表中选择的内容加载不同的元素。目前我使用 Vue.js 成功构建了这样一个界面。所以基本上我没有 SPA 应用程序,但是当需要复杂的前端界面时,我偶尔会在整个应用程序中使用 Vue.js。
现在客户端 WebAssembly Blazor 正式推出,我想用基于 Blazor 的代码替换我用 vue.js 编写的复杂表单。我发现,说明了如何使用服务器端Blazor这样做后在这里,但我无法找到关于它的WebAssembly版本什么。
有没有人设法将客户端 - Web 程序集 Blazor 集成到现有的 MVC 项目中?如果是这样怎么办?
当我尝试构建 Blazor 组件时,我可以为它定义参数,如下所示:
@code {
[Parameter]
public string MyString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我是否可以要求此参数,以便在使用组件时,除非我提供指定的参数,否则项目将不会构建?这是我应该担心的事情吗?我想我可以处理组件初始化中的任何无效值,如果值不是这样提供的,可能会抛出异常:
protected override void OnInitialized()
{
base.OnInitialized();
if (string.IsNullOrWhiteSpace(MyString)) {
// throw an exception here...
}
}
Run Code Online (Sandbox Code Playgroud)
但这是处理这个问题的正确方法吗?
我有一个页面,用户可以在其中粘贴 Youtube 视频网址,然后我需要提取视频的 ID 才能获取视频的缩略图。困难的部分是找到一种从视频 URL 中提取视频 ID 的可靠方法。这里有很多正则表达式解决方案,但对我来说,这些都不是 100% 可靠的。这里有一些:
这就像谁拥有更长的正则表达式的竞赛。我觉得正确的方法是从 Youtube 的 api 获取此信息,但看看它,似乎这个选项不可用:
https://developers.google.com/apis-explorer/#p/youtube/v3/
正如你所看到的,一切都是基于视频 ID 的。我觉得很荒谬的是,我需要实际的视频 ID 来获取有关视频的任何信息,因为现实世界的用户甚至不会知道视频 ID 是什么。Vimeo 已将此功能内置到其 API 中。这是一个例子:
https://vimeo.com/api/oembed.json?url=https://vimeo.com/29474908
有没有人有一个不涉及正则表达式的解决方案?
.net ×4
c# ×3
asp.net-mvc ×2
blazor ×2
linq ×2
asp.net ×1
asynchronous ×1
browser ×1
dapper ×1
javascript ×1
scriptbundle ×1
sql ×1
value-type ×1
vb.net ×1
youtube ×1
youtube-api ×1