在我的C#应用程序中,我传递一个格式为yyyymmdd-yyyymmdd的字符串变量,它表示来自和迄今.我想分别得到这些日期的开始和结束时间.目前我有以下代码,但想知道是否有更优雅的解决方案?
所以对于pdr = 20090521-20090523会得到"20090521 00:00:00"和"20090523 23:59:59"
private void ValidateDatePeriod(string pdr, out DateTime startDate,
out DateTime endDate)
{
string[] dates = pdr.Split('-');
if (dates.Length != 2)
{
throw new Exception("Date period is of incorrect format");
}
if (dates[0].Length != 8 || dates[1].Length != 8)
{
throw new Exception("Split date periods are of incorrect format");
}
startDate = DateTime.ParseExact(dates[0] + " 00:00:00",
"yyyyMMdd HH:mm:ss", null);
endDate = DateTime.ParseExact(dates[1] + "23:59:59",
"yyyyMMdd HH::mm:ss", null);
}
Run Code Online (Sandbox Code Playgroud) 我开始使用WiX进行自动构建以创建我的c#项目的msi,并且遇到错误"Undefined preprocessor variable'$(var.MyProject.TargetDir)'"
我使用的是最新的WiX v3.0.5419.在我的wxs文件中,我试图使用此网页上列出的预处理器变量(http://blogs.msdn.com/jrock/archive/2008/01/29/complete-list-of-candle-preprocessor- variables.aspx)
<Component Id="MyId" Guid="MyGuid">
<File Id="MyId" Name="MyName" KeyPath="yes"
Source="$(var.MyProject.TargetDir)\MyName.dll" />
</Component>
Run Code Online (Sandbox Code Playgroud)
我已将MyProject的引用添加到.wixproj中,如果我在记事本中打开它,我可以看到引用.
<ItemGroup>
<ProjectReference Include="..\MyProject.csproj">
<Name>MyProject</Name>
<Project>{guid}</Project>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这是我用来创建msi的nant构建脚本.也许是因为.wixproj知道构建中没有使用的项目引用?
<exec basedir="${tools.wix}" managed="true" program="candle.exe">
<arg line='-out "${tools.wix.objfile}"' />
<arg value="../MySetup.wxs" />
</exec>
Run Code Online (Sandbox Code Playgroud)
请问有人能开导我吗?
我有一个修改对象的委托.我从调用方法传递一个对象到委托,但调用方法不会获取这些更改.如果我将a List作为对象传递,则相同的代码可以工作.
我认为所有对象都是通过引用传递的,因此任何修改都会反映在调用方法中.那是对的吗?
我可以修改我的代码以将ref对象传递给委托.但我想知道为什么这是必要的.或者是吗?
public class Binder
{
protected delegate int MyBinder<T>(object reader, T myObject);
public void BindIt<T>(object reader, T myObject)
{
//m_binders is a hashtable of binder objects
MyBinder<T> binder = m_binders["test"] as MyBinder<T>;
int i = binder(reader, myObject);
}
}
public class MyObjectBinder
{
public MyObjectBinder()
{
m_delegates["test"] = new MyBinder<MyObject>(BindMyObject);
}
private int BindMyObject(object reader, MyObject obj)
{
obj = new MyObject
{
//update properties
};
return 1;
}
}
///calling method in some …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的Windows机器创建一个批处理脚本,它循环遍历一个(字符串/十进制)值列表,并使用每个值作为循环内的参数.
下面是一个简单的for循环的例子,我想用它来显示所有不同的版本文件(从我的列表中)
FOR ? in ('1.1','1.2','2.4','3.9') do echo V[value_from_for_loop].txt
Run Code Online (Sandbox Code Playgroud)
我在如何遍历每个项目并在echo语句中使用变量时遇到问题.
我想使用Reflection将所有属性从MyObject更新到另一个属性.我遇到的问题是特定对象是从基类继承的,并且不更新那些基类属性值.
以下代码复制顶级属性值.
public void Update(MyObject o)
{
MyObject copyObject = ...
FieldInfo[] myObjectFields = o.GetType().GetFields(
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
foreach (FieldInfo fi in myObjectFields)
{
fi.SetValue(copyObject, fi.GetValue(o));
}
}
Run Code Online (Sandbox Code Playgroud)
我想看看是否有更多BindingFlags属性我可以用来帮助但无济于事.
我已经能够DbSet使用此链接模拟来自Moq的实体框架.
但是,我现在想知道如何模拟对SqlQuery的调用.不确定这是否可行或者如何依赖于模拟的db上下文知道正在调用什么"查询".
以下是我想要嘲笑的内容.
var myObjects = DbContext.Database
.SqlQuery<MyObject>("exec [dbo].[my_sproc] {0}", "some_value")
.ToList();
Run Code Online (Sandbox Code Playgroud)
我目前还没有尝试任何东西,因为不知道如何开始嘲笑这个例子.
的嘲讽DbSet是下方再次重申,我可以正确模拟返回DbSet的MyObject的,但现在我试图嘲弄返回列表SQLQuery对MyObject的.
var dbContext = new Mock<MyDbContext>();
dbContext.Setup(m => m.MyObjects).Returns(mockObjects.Object);
dbContext.Setup(m => m.Database.SqlQuery... something along these lines
Run Code Online (Sandbox Code Playgroud) 我试图返回一份账户清单,包括余额,结果和收入
Account Transaction
------- -----------
AccountID TransactionID
BankName AccountID
Locale Amount
Status
Run Code Online (Sandbox Code Playgroud)
这是我现在拥有的.有人可以解释我哪里错了吗?
select
a.ACCOUNT_ID,
a.BANK_NAME,
a.LOCALE,
a.STATUS,
sum(t1.AMOUNT) as BALANCE,
sum(t2.AMOUNT) as OUTCOME,
sum(t3.AMOUNT) as INCOME
from ACCOUNT a
left join TRANSACTION t1 on t1.ACCOUNT_ID = a.ACCOUNT_ID
left join TRANSACTION t2 on t2.ACCOUNT_ID = a.ACCOUNT_ID and t2.AMOUNT < 0
left join TRANSACTION t3 on t3.ACCOUNT_ID = a.ACCOUNT_ID and t3.AMOUNT > 0
group by a.ACCOUNT_ID, a.BANK_NAME, a.LOCALE, a.[STATUS]
Run Code Online (Sandbox Code Playgroud)
UPDATE
根据下面的评论更正了t2左连接语法.
我期待的输出有望从问题中显而易见.对于6个帐户,SQL应返回6个帐户及其帐户的余额,收入和结果.
我提供的SQL问题是数字错误!根据评论,我认为问题源于连接多次,这是错误地汇总金额.
我的解决方案中的所有项目都设置为使用.net framework 4.5构建.
我正在尝试创建一个C#VSTO项目,但无法分配.net 4.5目标框架.这是必需的,所以我可以参考我的VSTO项目中的其他项目.
该错误表明该项目不能用于目标框架(.net 4.5).
或者,我是否必须在不使用VSTO项目的情况下实现excel加载项?
我有一个Item包含使用AutoMapperProduct映射到各自ViewModel对象的列表.
在我的MVC项目中,我有一个Action方法,显示Item一个选中的Product.为此我有一个ViewModel被调用的ItemDetailsViewModel包含扁平Item对象,一个列表ProductViewModel和一个扁平选择Product.
我遇到的困难是最好的展示这个扁平的选择Product.
可以把它想象成eBay,你Item可以选择多种变化,例如颜色.对我来说,有多种变化Products.当用户选择Product我想要返回ItemDetailsie Item,列表Products和所选择的Product.
我想知道最好的方法吗?目前我的方法是将一个映射Item到一个ItemDetailsViewModel,选择所需的ProductViewModel,然后专门将ProductViewModel后面的每个属性映射到ItemDetailsViewModel.此外,由于Item与Product具有相同命名属性,最后一行映射将产品带回覆盖Item的ID和密码.
有关如何最好地配置映射的任何建议?
我已经省略了我所拥有的映射,因为它主要是直接的一对一映射,除了将选定的映射映射ProductViewModel到ItemDetailsViewModel.
Mapper.CreateMap<Item, ItemViewModel>()
.ReverseMap();
Mapper.CreateMap<ProductViewModel, ItemDetailsViewModel>()
.ForMember(d => d.ProductId, o => o.MapFrom(s => s.Id))
.ForMember(d => d.ProductCode, …Run Code Online (Sandbox Code Playgroud) 有没有办法在Controller级别添加属性,但不能在特定操作上添加.例如,如果我在我的控制器中有10个动作,那些动作中只有一个不需要我创建的特定属性.
[MyAttribute]
public class MyController : Controller
{
public ActionResult Action1() {}
public ActionResult Action2() {}
[Remove_MyAttribute]
public ActionResult Action3() {}
}
我可能会将此Action移动到另一个控制器(但不喜欢)或者我可以将MyAttribute应用于除Action3之外的所有操作,但只是想如果有更简单的方法?
c# ×7
.net-4.5 ×1
asp.net-mvc ×1
automapper ×1
automapper-3 ×1
command-line ×1
copy ×1
datetime ×1
dbcontext ×1
for-loop ×1
moq ×1
preprocessor ×1
reflection ×1
sql ×1
t-sql ×1
votive ×1
vsto ×1
windows ×1
wix ×1
wix3 ×1