在这里的帖子中,我学习了如何使用Linq的延迟执行来构建动态查询.但查询实际上是使用WHERE条件的AND连接.
如何使用OR逻辑实现相同的查询?
由于Flags枚举,查询应搜索Username,WindowsUsername或两者:
public User GetUser(IdentifierType type, string identifier)
{
using (var context = contextFactory.Invoke())
{
var query = from u in context.Users select u;
if (type.HasFlag(IdentifierType.Username))
query = query.Where(u => u.Username == identifier);
if (type.HasFlag(IdentifierType.Windows))
query = query.Where(u => u.WindowsUsername == identifier);
return query.FirstOrDefault();
}
}
Run Code Online (Sandbox Code Playgroud) 我们将 XML DateTime 值解析为 DateTimeOffset 值。根据DateTime 的 W3C XSD 文档,该类型可能有时区信息,也可能没有。
我们的要求是:
问题是,当没有时区的 XML DateTime 被解析为 DateTimeOffset 时,它默认使用本地(系统)时区。似乎无法覆盖默认时区,也无法识别时区是在内部解析还是添加的。
有什么方法可以指定 DateTimeOffset 解析使用的默认时区吗?
如果不是,如何确定在解析 DateTimeOffset 期间是否自动解析或添加了时区?
我觉得奇怪的是,不支持像设置当前区域性那样为 .NET 应用程序设置时区。
因此,解决此问题的唯一方法似乎是首先将值解析为 DateTime 并检查 Kind 属性。如果 Kind 不是Unspecified,则再次将该值解析为 DateTimeOffset:
/*
sample values:
- 2015-06-03T10:47:01
- 2015-06-03T07:47:01Z
- 2015-06-03T10:47:01+03:00
*/
DateTimeOffset dto;
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(ConfigurationManager.AppSettings["DefaultTimeZone"]);
var dt = DateTime.Parse(value);
if (dt.Kind == DateTimeKind.Unspecified)
{
dto = new DateTimeOffset(dt, timeZone.GetUtcOffset(dt));
}
else
{
dto = DateTimeOffset.Parse(value);
}
Run Code Online (Sandbox Code Playgroud) 我有一个Windows服务,将文件导入数据库.当服务收到停止通知时,它应该尽可能完成当前导入.可能需要几分钟才能完成.
因此,我使用该ServiceBase.RequestAdditionalTime方法向SCM发出服务仍在工作且可操作的信号.
protected override void OnStop()
{
var waitTime = TimeSpan.FromSeconds(5);
var additionalWaitTime = TimeSpan.FromMinutes(3);
Trace.Write("Stopping service...");
var task = Task.Factory.StartNew(() => worker.Stop());
while (!task.Wait(waitTime))
{
Trace.Write("Requesting additional time...");
RequestAdditionalTime((int)additionalWaitTime.TotalMilliseconds);
Trace.Write("Waiting for {1} to complete...");
}
Trace.Write("Service stopped.");
}
Run Code Online (Sandbox Code Playgroud)
在测试时,我找不到使用该RequestAdditionalTime方法的服务的任何不同行为.如果我删除了RequestAdditionalTime呼叫,则服务的行为方式相同:
Stopping到我的工作人员完成为止.WaitToKillServiceTimeout)有什么影响RequestAdditionalTime?我应该在哪里看到使用它时的差异,我该如何测试呢?有几次我读到,如果没有请求额外的时间,SCM将终止服务.但我看不出那种行为.
所有在我的本地开发机器(Win 8.1)上运行的测试,假设其行为与Windows Server OS上的行为相同.
我试图弄清楚如何将商家集合展平,每个商家包含订单集合到OrderViewModel的平面列表.
在这里我的DTO:
public class Merchant
{
public string MerchantName { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public string OrderId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是视图模型:
public class OrderViewModel
{
public string MerchantName { get; set; }
public string OrderId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的目标是一个压扁列表<商家>到一个列表<OrderViewModel>而下面的测试结构应导致6个视图模型:
var myMerchants = new List<Merchant>
{
new Merchant
{
MerchantName = "Merchant X",
Orders = new List<Order>
{
new Order { OrderId …Run Code Online (Sandbox Code Playgroud) 是否可以在UnityContainer中配置的另一种类型的构造函数中实例化UnityContainer中配置的类型?根据我目前的解决方案,我得到了一个
ResolutionFailedException:
依赖项的解析失败,type ="Sample.IMyProcessor",name ="(none)".
在解决时发生异常:
例外是:VerificationException - 操作可能会破坏运行时的稳定性.
问题是我的第二个类(FileLoader)有一个应该在第一个构造函数中计算的参数:
MyProcessor类的构造函数:
public class MyProcessor : IMyProcessor
{
private readonly IFileLoader loader;
private readonly IRepository repository;
public MyProcessor(IRepository repository, string environment, Func<SysConfig, IFileLoader> loaderFactory)
{
this.repository = repository;
SysConfig config = repository.GetConfig(environment);
loader = loaderFactory(config);
}
public void DoWork()
{
loader.Process();
}
}
Run Code Online (Sandbox Code Playgroud)
这里是UnityContainer配置的Main函数:
public static void Run()
{
var unityContainer = new UnityContainer()
.RegisterType<IRepository, MyRepository>()
.RegisterType<IFileLoader, FileLoader>()
.RegisterType<IMyProcessor, MyProcessor>(new InjectionConstructor(typeof(IRepository), "DEV", typeof(Func<SysConfig, IFileLoader>)));
//Tests
var x = …Run Code Online (Sandbox Code Playgroud)