我有一个字符串列表.每个字符串都遵循"{Path}\UpdateTo {Version} - {Order}"模式.
我需要对列表进行排序,使得最低版本号位于顶部.如果存在多个具有相同版本号的文件,则会附加可选的订单参数.如果任何字符串上存在订单,则它应显示在具有相同版本号且没有订单号的字符串上方.
例如,给出以下列表(注意项目是随机排序的):
var files = new List<string>() {
@"C:\Migrations\UpdateTo1.2-2",
@"C:\Migrations\UpdateTo1.5-2",
@"C:\Migrations\UpdateTo1.2",
@"C:\Migrations\UpdateTo1.4",
@"C:\Migrations\UpdateTo1.1",
@"C:\Migrations\UpdateTo1.5",
@"C:\Migrations\UpdateTo1.2-1",
@"C:\Migrations\UpdateTo1.5-1"
};
Run Code Online (Sandbox Code Playgroud)
结果将是:
var files = new List<string>() {
@"C:\Migrations\UpdateTo1.1",
@"C:\Migrations\UpdateTo1.2-1",
@"C:\Migrations\UpdateTo1.2-2",
@"C:\Migrations\UpdateTo1.2",
@"C:\Migrations\UpdateTo1.4",
@"C:\Migrations\UpdateTo1.5-1",
@"C:\Migrations\UpdateTo1.5-2",
@"C:\Migrations\UpdateTo1.5"
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试各种各样的想法,但到目前为止,我的尝试已经完全混乱.如果有人可以提供帮助,我会很感激.谢谢
我一直在构建ASP.NET MVC应用程序,当我启动它时,我担心潜在的多线程问题.一个特别值得关注的是以下代码:
private static IDictionary<string, ISettings> _settingsDictionary = new Dictionary<string, ISettings>();
public T Settings<T>() where T : ISettings, new() {
var key = typeof(T).FullName;
if (!_settingsDictionary.ContainsKey(key))
_settingsDictionary[key] = _settingsService.GetSettings<T>();
return (T)_settingsDictionary[key];
}
Run Code Online (Sandbox Code Playgroud)
请注意,字典定义为静态.这允许我缓存字典,以便它为应用程序长度的每个请求返回相同的实例.
这在本地测试时工作正常,但我担心它可能会被数百名用户使用.这让我研究了ConcurrencyDictionary.请问你能告诉我是否需要使用它以及如果是这样的话我会怎么做.
谢谢
是否可以获取应用了自定义属性的所有引用程序集(在单元测试项目中).我使用以下代码使我的应用程序成功运行:
var assemblies = System.Web.Compilation.BuildManager.GetReferencedAssemblies().Cast<Assembly>().Where(a => a.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().Any()).ToList();
Run Code Online (Sandbox Code Playgroud)
但是System.Web.Compilation.BuildManager在我的测试项目中不起作用,所以我尝试了:
Assembly.GetExecutingAssembly().GetReferencedAssemblies().Select(a => Assembly.ReflectionOnlyLoad(a.FullName).Where(a => a.GetCustomAttributes(false).OfType<AssemblyCategoryAttribute>().Any()).ToList();
Run Code Online (Sandbox Code Playgroud)
但这引发了错误:
反映通过ReflectionOnlyGetType加载的Type的自定义属性是非法的(请参阅Assembly.ReflectionOnly) - 请改用CustomAttributeData.
如果有人能告诉我怎么做,我会很感激.谢谢
我的Web应用程序具有以下类:
public class DatabaseProvider {
private readonly IDbConnection _cn;
public DatabaseProvider(IDbConnection cn) {
_cn = cn;
}
public void ExecuteNonQuery(string query) {
// Execute the query
var cmd = _cn.CreateCommand();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下代码声明IDbConnection依赖项(使用Microsoft Unity):
container.RegisterType<IDbConnection>(new InjectionFactory(c => {
var cn = new SqlConnection("...");
cn.Open();
return cn;
}));
Run Code Online (Sandbox Code Playgroud)
这允许我将连接换成SQLite,如下所示:
container.RegisterType<IDbConnection>(new InjectionFactory(c => {
var cn = new SQLiteConnection("Data Source=:memory:;Version=3;");
cn.Open();
return cn;
}));
Run Code Online (Sandbox Code Playgroud)
我在测试时使用SQLite,连接必须保持打开,否则数据会丢失.因此,我不能在需要时打开和关闭连接.
我总是在需要时打开与数据库的连接,并想知道这是否可以扩展到大型应用程序?
我很感激有关如何改进的建议.谢谢
在 Symfony 2 或 3 中是否有一种很好的方法来加载实现特定接口的目录中的所有类?
我的应用程序具有以下实体:
public class User
{
public virtual int UserID { get; set; }
public virtual string UserName { get; set; }
public virtual IList<UserLog> Log { get; private set; }
public User()
{
Log = new List<UserLog>();
}
}
public class UserLog
{
public virtual int UserLogID { get; set; }
public virtual User User { get; set; }
public virtual string UserName { get; set; }
public virtual DateTime DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用以下流畅的映射:
public class UserMap …Run Code Online (Sandbox Code Playgroud) 我是SQLite的新手,我正在尝试运行以下代码:
using (var cn = new SQLiteConnection("Data Source=:memory:;Version=3;")) {
cn.Open();
var cmd = cn.CreateCommand();
cmd.CommandText = "CREATE TABLE [ContentItems] ([Id] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](100) NOT NULL, CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id]))";
cmd.ExecuteNonQuery();
var cmd2 = cn.CreateCommand();
cmd2.CommandText = "INSERT INTO [ContentItems] (Title) VALUES ('Test 1')";
cmd2.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
由于约束违反导致的中止ContentItems.Id可能不是NULL
我已经浏览了文档,但根据我过去的SQL经验,我看不出为什么这不起作用.我很感激你的帮助.谢谢
我正在尝试将“OPTION(RECOMPILE)”添加到我的一些 NHibernate 查询的末尾。我找到了以下帖子:
这描述了如何添加拦截器来附加 SQL。然而,他们使用 ICriteria,而我使用 LINQ 来查询我的数据。理想情况下,我希望能够这样说:
var query = session.Query<Foo>().OptionRecompile().ToList();
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以向 IQueryable 添加一个扩展方法,它将在查询中注入一些字符串,然后我可以在拦截器中检测到该字符串。这与上面文章中使用的方法类似,他们添加评论并进行检测。
了解更多信息。我之前处理过 LINQ 扩展,并且我知道您可以使用 HQL 生成器添加扩展属性/方法。但根据我的理解,这只能让我说:
var query = session.Query<Foo>().Where(f => f.Bar.OptionRecompile()).ToList();
Run Code Online (Sandbox Code Playgroud)
这并不理想,而且看起来更像是一种黑客行为。如果有人可以提供帮助,我将不胜感激。谢谢
我有以下协变接口:
public interface IHierarchical<out T> where T : IHierarchical<T> {
T Parent { get; }
IEnumerable<T> Children { get; }
}
Run Code Online (Sandbox Code Playgroud)
然后我有以下从上面的接口派生的接口:
public interface ISiteMapNode<T> : ISiteMapNode where T : ISiteMapNode<T> { }
public interface ISiteMapNode : IHierarchical<ISiteMapNode> {
string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后我有以下实现:
public class SiteMapNode : ISiteMapNode<SiteMapNode> {
public string Name { get; set; }
public ISiteMapNode Parent { get; }
public IEnumerable<ISiteMapNode> Children { get; }
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个方法,它接受 ISiteMapNode 类型的参数并尝试设置 Parent 属性。显然这不起作用,因为 Parent 属性是只读的。我必须删除 …
c# ×6
nhibernate ×2
sqlite ×2
unit-testing ×2
asp.net-mvc ×1
concurrency ×1
covariance ×1
linq ×1
php ×1
reflection ×1
sorting ×1
sql ×1
sql-server ×1
symfony ×1