我有一个包含大量小异步数据库查询的数组; 例如:
// I actually have a more complex function that
// accepts name/value pairs for query parameters.
let runSql connString sql = async {
use connection = new SqlConnection(connString)
use command = new SqlCommand(sql, connection)
do! connection.OpenAsync() |> Async.AwaitIAsyncResult |> Async.Ignore
return! command.ExecuteScalarAsync() |> Async.AwaitTask
}
let getName (id:Guid) = async {
// I actually use a parameterized query
let querySql = "SELECT Name FROM Entities WHERE ID = '" + id.ToString() + "'"
return! runSql connectionString querySql
} …Run Code Online (Sandbox Code Playgroud) C# 中的类和结构有几个共同特征:
\n\n我们经常使用“类”和“结构”来区分“引用类型”和“值类型”,但有时考虑这两种类型是有用的。此外,“引用类型”还包括接口和委托,它们不是类。所以“类”并不意味着任何引用类型,它的意思是“引用_ (填空) _ ”。
\n\n例如,如果引用和值类型声明如下所示:
\n\npublic sealed class ref String { }\npublic class val Int32 { }\nRun Code Online (Sandbox Code Playgroud)\n\n而不是像这样:
\n\npublic sealed class String { }\npublic struct Int32 { }\nRun Code Online (Sandbox Code Playgroud)\n\n那么“类”这个词就可以用来表示这个概念。
\n\n我在这里提出的最佳答案是“具体类型”,但这会令人困惑,因为它也可以引用抽象类的非抽象子类。
\n\n有什么建议么?
\n\n编辑
\n\n澄清一下,我并不是在寻找一个可以共同描述类和结构实例的词。我正在尝试描述类类型和结构类型。
\n\n换句话说,如果“class”表示包含 、 等的集合System.String,而“struct”表示包含、等System.FileInfo的集合,那么我正在寻找表示这些集合的并集的单词。System.Int32System.Collections.Generic.List<T>.Enumerator
编辑2
\n\n(针对 Jord\xc3\xa3o\ 的回答)回答这个问题的另一种方法是完成以下句子:“所有 C# 方法实现必须声明为 _ (填空) …
我有一个Linq查询返回到var类型myQry
var myQry = from .....
Run Code Online (Sandbox Code Playgroud)
这是一个很大的linq返回我需要进一步过滤的所有记录.在我的一个if条件中,我有一个像这样运行的过滤器来检查日期.我需要检查名称是否包含输入的名称,并确切地匹配生日.
我试过这个编译和运行,但没有正常工作
myQry.Where(x => x.FirstName.Contains(strName) && DateTime.Compare( x.BirthDt, searchDt)>=0).ToList()
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个,它抛出异常"DbArithmeticExpression参数必须有一个数字公共类型"
myQry.Where(x => x.FirstName.Contains(strName) && (x.BirthDt- searchDt).Days == 0).ToList();
Run Code Online (Sandbox Code Playgroud)
对于这种情况,当我在查询中使用where子句时,进行日期比较的最佳方法是什么?LinQ查询的where子句中不允许进行哪些操作?
谢谢你的时间...
我想要的是概念上非常简单,但我无法弄清楚如何最好地实现这样的事情.
在我的Web应用程序中,我有访问存储库的服务,这些存储库访问与SQL Server数据库交互的EF.所有这些都是每个Web请求实例一次.
我想在存储库和EF(或服务和存储库?)之间有一个额外的层,它静态地跟踪从数据库中提取和推送到数据库的对象.
假设数据库访问仅通过应用程序完成,目标就是我们知道一个事实,即除非某些存储库访问EF并提交更改,否则对象集并没有真正改变.
一个例子是:
存储库调用方法 GetAllCarrots();
GetAllCarrots()执行查询SQL Server检索一个List<Carrot>,如果之间没有其他任何事情发生,我想防止这个查询每次都在SQL Server上实际进行(无论它是在不同的Web请求,我希望能够处理那个场景)
现在,如果调用BuyCarrot()将a添加Carrot到表中,那么我希望它使Carrots 的静态高速缓存无效,这将GetAllCarrots();需要再次查询数据库.
有什么关于数据库缓存的好资源?
在https://docs.microsoft.com/zh-cn/dotnet/fsharp/language-reference/pattern-matching#tuple-pattern处,有一个带有类型注释的模式示例:
模式可以具有类型注释。它们的行为类似于其他类型注释,并像其他类型注释一样指导推理。模式中的类型注释必须带括号。以下代码显示了具有类型注释的模式。
Run Code Online (Sandbox Code Playgroud)let detect1 x = match x with | 1 -> printfn "Found a 1!" | (var1 : int) -> printfn "%d" var1 detect1 0 detect1 1
类型注释(var1 : int)是多余的,因为1前一个模式中的文字会明确地建立类型。
在任何情况下,诸如此类的类型注释会很有用吗?
我有一个方法包装一些经常返回的外部API调用null.当它发生时,我想返回一个default值.该方法看起来像这样
public static T GetValue<T>(int input)
{
object value = ExternalGetValue(input);
return value != null ? (T)value : default(T)
}
Run Code Online (Sandbox Code Playgroud)
问题是(T)value可能抛出无效的强制转换异常.所以我想我会改成它
var value = ExternalGetValue(input) as Nullable<T>;
Run Code Online (Sandbox Code Playgroud)
但这需要where T : struct,我也希望允许引用类型.
然后我尝试添加一个可以处理两者的重载.
public static T GetValue<T>(int input) where T : struct { ... }
public static T GetValue<T>(int input) where T : class { ... }
Run Code Online (Sandbox Code Playgroud)
但我发现你不能根据约束重载.
我意识到我可以有两个不同名称的方法,一个用于可空类型,一个用于不可用类型,但我宁愿不这样做.
有没有一种好方法可以检查我是否可以在T不使用的情况下进行投射as?或者我可以使用as并拥有适用于所有类型的单一方法吗?
编译:
let inline f< ^T when ^T : (static member (<<<) : ^T * int -> ^T) > (x : ^T) = x <<< 1
Run Code Online (Sandbox Code Playgroud)
不编译:
let inline f< ^T when ^T : (static member (>>>) : ^T * int -> ^T) > (x : ^T) = x >>> 1
Run Code Online (Sandbox Code Playgroud)
错误:
添加空格无济于事; 此行产生相同的编译器错误:
let inline f< ^T when ^T : (static member ( >>> ) : ^T * int …Run Code Online (Sandbox Code Playgroud) 是否有可能编写一个lambda表达式,它将迭代对象数组并替换其中一个属性中的'X','Y',''和'Z'的所有出现?
例如
return query.Select(x => { x.SomePropertyName= x.SomePropertyName.Trim().Replace(' ', "_"); return x; }).ToList();
Run Code Online (Sandbox Code Playgroud)
出于某种原因,当我需要替换多个字符时,上面的查询不会替换单个字符.
谢谢
为什么以下代码编译?
如果参数是接口而不是泛型的超级接口,为什么允许将通用列表转换为其类型参数?
这是什么意思?
//Connection can be substituted by any interface
List<Connection> list = null;
Connection c = (Connection) list;
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用元组的TRest部分,以便我可以说将14个字符串添加到元组列表中.
List<Tuple<string, string, string, string, string, string, string, Tuple<string, string, string, string, string, string, string>>> list = new List<Tuple<string, string, string, string, string, string, string, Tuple<string, string, string, string, string, string, string>>>();
Run Code Online (Sandbox Code Playgroud)
创建第二个元组列表(list2),我将7个字符串添加到:
Tuple<string, string, string, string, string, string, string> list2 = Tuple.Create(test8, test9, test10, test11, test12, test13, test14);
Run Code Online (Sandbox Code Playgroud)
然后将所有字符串添加到第一个列表:
list.Add(Tuple.Create(test1, test2, test3, test4, test5, test6, test7, list2));
Run Code Online (Sandbox Code Playgroud)
我收到了一个重载错误,在我做一些根本不正确的事情之前,我没有尝试过使用它吗?