小编pho*_*oog的帖子

如何限制传递给Async.Parallel的大量异步工作流

我有一个包含大量小异步数据库查询的数组; 例如:

// 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)

f# asynchronous

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

是否有一个词包含“类”和“结构”?

C# 中的类和结构有几个共同特征:

\n\n
    \n
  • 它们可以被实例化(没有相反的限制,就像抽象类和静态类一样)
  • \n
  • 它们可以包含方法和属性实现
  • \n
  • 类型的作者定义类型的实例字段
  • \n
\n\n

我们经常使用“类”和“结构”来区分“引用类型”和“值类型”,但有时考虑这两种类型是有用的。此外,“引用类型”还包括接口和委托,它们不是类。所以“类”并不意味着任何引用类型,它的意思是“引用_ (填空) _ ”。

\n\n

例如,如果引用和值类型声明如下所示:

\n\n
public sealed class ref String { }\npublic class val Int32 { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

而不是像这样:

\n\n
public sealed class String { }\npublic struct Int32 { }\n
Run 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

\n\n

编辑2

\n\n

(针对 Jord\xc3\xa3o\ 的回答)回答这个问题的另一种方法是完成以下句子:“所有 C# 方法实现必须声明为 _ 填空) …

c# terminology

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

使用LINQ比较查询中的日期

我有一个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子句中不允许进行哪些操作?

谢谢你的时间...

.net c# comparison datetime linq-to-sql

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

缓存实体框架数据并跟踪其变化?

我想要的是概念上非常简单,但我无法弄清楚如何最好地实现这样的事情.

在我的Web应用程序中,我有访问存储库的服务,这些存储库访问与SQL Server数据库交互的EF.所有这些都是每个Web请求实例一次.

我想在存储库和EF(或服务和存储库?)之间有一个额外的层,它静态地跟踪从数据库中提取和推送到数据库的对象.

假设数据库访问仅通过应用程序完成,目标就是我们知道一个事实,即除非某些存储库访问EF并提交更改,否则对象集并没有真正改变.

一个例子是:

存储库调用方法 GetAllCarrots();

GetAllCarrots()执行查询SQL Server检索一个List<Carrot>,如果之间没有其他任何事情发生,我想防止这个查询每次都在SQL Server上实际进行(无论它是在不同的Web请求,我希望能够处理那个场景)

现在,如果调用BuyCarrot()将a添加Carrot到表中,那么我希望它使Carrots 的静态高速缓存无效,这将GetAllCarrots();需要再次查询数据库.

有什么关于数据库缓存的好资源?

c# sql caching entity-framework

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

具有类型注释的模式匹配

https://docs.microsoft.com/zh-cn/dotnet/fsharp/language-reference/pattern-matching#tuple-pattern处,有一个带有类型注释的模式示例:

模式可以具有类型注释。它们的行为类似于其他类型注释,并像其他类型注释一样指导推理。模式中的类型注释必须带括号。以下代码显示了具有类型注释的模式。

let detect1 x =
      match x with
      | 1 -> printfn "Found a 1!"
      | (var1 : int) -> printfn "%d" var1
  detect1 0
  detect1 1
Run Code Online (Sandbox Code Playgroud)

类型注释(var1 : int)是多余的,因为1前一个模式中的文字会明确地建立类型。

在任何情况下,诸如此类的类型注释会很有用吗?

f# pattern-matching

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

如何检查值是否可以转换为泛型类型?

我有一个方法包装一些经常返回的外部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并拥有适用于所有类型的单一方法吗?

c# generics types casting nullable

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

静态类型变量,成员约束,编译器错误?("尝试将其解析为运营商名称,但失败了")

编译:

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)

错误:

  1. 尝试将其解析为运营商名称,但失败了
  2. 成员签名中出现意外的符号">".预期')'或其他令牌.
  3. 类型参数缺少约束'when ^ T :(静态成员(>>>):^ T*int32 - > ^ T)'

添加空格无济于事; 此行产生相同的编译器错误:

let inline f< ^T when ^T : (static member ( >>> ) : ^T * int …
Run Code Online (Sandbox Code Playgroud)

f# inline f#-3.0

4
推荐指数
2
解决办法
155
查看次数

LINQ lambda表达式替换字符串中的多个字符?

是否有可能编写一个lambda表达式,它将迭代对象数组并替换其中一个属性中的'X','Y',''和'Z'的所有出现?

例如

return query.Select(x => { x.SomePropertyName= x.SomePropertyName.Trim().Replace(' ', "_"); return x; }).ToList();
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我需要替换多个字符时,上面的查询不会替换单个字符.

谢谢

c# linq lambda replace

3
推荐指数
2
解决办法
2万
查看次数

为什么可以将通用列表强制转换为其类型参数

为什么以下代码编译?
如果参数是接口而不是泛型的超级接口,为什么允许将通用列表转换为其类型参数?

这是什么意思?

//Connection can be substituted by any interface
List<Connection> list = null;
Connection c = (Connection) list; 
Run Code Online (Sandbox Code Playgroud)

java generics casting

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

使用Tuple的TRest组件

我正在尝试使用元组的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)

我收到了一个重载错误,在我做一些根本不正确的事情之前,我没有尝试过使用它吗?

c# tuples list

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