我有一个名为Entry这样的类:
class Entry{
string Id {get;set;}
string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后Entry使用ADO.NET 接受多个此类对象插入数据库的方法:
static void InsertEntries(IEnumerable<Entry> entries){
//build a SqlCommand object
using(SqlCommand cmd = new SqlCommand()){
...
const string refcmdText = "INSERT INTO Entries (id, name) VALUES (@id{0},@name{0});";
int count = 0;
string query = string.Empty;
//build a large query
foreach(var entry in entries){
query += string.Format(refcmdText, count);
cmd.Parameters.AddWithValue(string.Format("@id{0}",count), entry.Id);
cmd.Parameters.AddWithValue(string.Format("@name{0}",count), entry.Name);
count++;
}
cmd.CommandText=query;
//and then execute the command
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该继续使用上面的方式发送多个insert语句(构建一个巨大的insert语句及其参数字符串并通过网络发送),或者我应该保持一个打开的连接并发送一个insert语句对于每个人Entry这样:
using(SqlCommand …Run Code Online (Sandbox Code Playgroud) 我似乎找不到在函数头中的地图键上进行模式匹配的方法.有没有办法做到这一点?我正在尝试做的是根据某个键是否已存在于地图中而运行不同的代码(并且还想避免if/else等)
这就是我的代码
def my_func(key, %{key => _} = map), do: ...
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误
**(CompileError)在映射键匹配内非法使用变量键,映射只能使用^键匹配现有变量
当然我也试过用它 ^
def my_func(key, %{^key => _} = map), do: ...
Run Code Online (Sandbox Code Playgroud)
然后给出
**(CompileError)未绑定变量^键
我在Windows 8.1机器上使用elixir 1.3.1/erlang 19.0 x64.谢谢阅读!