有没有一种很好的方法将IEnumerable转换为DataTable?
我可以使用反射来获取属性和值,但这似乎有点低效,是否有内置的东西?
(我知道这些例子:ObtainDataTableFromIEnumerable)
编辑:
这个问题通知我处理空值的问题.
我在下面写的代码正确处理空值.
public static DataTable ToDataTable<T>(this IEnumerable<T> items) {
// Create the result table, and gather all properties of a T
DataTable table = new DataTable(typeof(T).Name);
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
// Add the properties as columns to the datatable
foreach (var prop in props) {
Type propType = prop.PropertyType;
// Is it a nullable type? Get the underlying type
if (propType.IsGenericType && propType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
propType = new NullableConverter(propType).UnderlyingType;
table.Columns.Add(prop.Name, propType);
}
// …
Run Code Online (Sandbox Code Playgroud) 是否有可能创建一个MVC根应用程序(具有主页和主题的Portal)并添加几个基于WebForms的子项目(我们已经有一个现有的WebForms应用程序,我们想要集成到Portal中)?
您将如何集中导航(站点地图,网址路由)?
你会如何分享这些主页?
您如何参考资源(〜问题等)?
像这里描述的那样的解决方案似乎有些过时了
假设我们在Core Data模型中有两个实体:Departments和Employees.
该部门与员工有一对多的关系.
我有以下ManagedObjectContexts:
- Root:连接到持久性存储协调器
- Main:具有父Root的上下文
当我想创建一个Employee我做到以下几点:
-我有一个部门的主要方面
-我在主环境中创建一个Employee
-我分配部门到员工的部门属性
-我省主要方面
-我保存根上下文
这将在Main上下文和Root上下文中创建一个保留周期.
如果我没有子上下文(所有在Root上下文中)这样做,那么我可以通过调用refreshObject:mergeChanges
Employee 来打破保留周期.在我使用这两个上下文的情况下,我仍然可以使用该方法来打破Main上下文的循环,但是我如何打破Root上下文的循环呢?
旁注:这是一个描述我的问题的简单示例.在仪器中,我可以清楚地看到分配数量的增长.在我的应用程序中,我的上下文比一个级别更深,导致更大的问题,因为我得到了一个新的实体分配,每个上下文保留周期我正在保存.
更新15/04:NSPrivateQueueConcurrencyType vs NSMainQueueConcurrencyType
保存两个上下文后,我可以refreshObject:mergeChanges
使用Department对象在Main上下文中执行.正如预期的那样,这将使Department对象重新出错,打破保留周期并在该上下文中取消分配Department和Employee实体.
下一步是打破Root上下文中存在的保留周期(保存Main上下文已将实体传播到Root上下文).我可以在这里做同样的技巧,并refreshObject:mergeChanges
在Department对象的Root上下文中使用.
奇怪的是:当NSMainQueueConcurrencyType创建我的根上下文(所有分配重新故障和dealloced)这工作得很好,但与NSPrivateQueueConcurrencyType创建我的根上下文(所有分配的重新出现故障,但不工作不 dealloced ).
附注:Root上下文的所有操作都在performBlock(AndWait)调用中完成
更新15/04:第2部分
当我做另外一个(没用,因为没有改变)保存或回滚与NSPrivateQueueConcurrencyType根上下文,对象似乎被释放.我不明白为什么这与NSMainQueueConcurrencyType的行为不一样.
更新16/04:演示项目
我创建了一个演示项目:http://codegazer.com/code/CoreDataTest.zip
更新21/04:到达那里
感谢Jody Hagings的帮助!
我试图refreshObject:mergeChanges
移出我的ManagedObject didSave
方法.
你能解释一下我之间的区别吗:
[rootContext performBlock:^{
[rootContext save:nil];
for (NSManagedObject *mo in rootContext.registeredObjects)
[rootContext refreshObject:mo mergeChanges:NO];
}];
Run Code Online (Sandbox Code Playgroud)
和
[rootContext performBlock:^{
[rootContext save:nil];
[rootContext performBlock:^{
for (NSManagedObject *mo in rootContext.registeredObjects)
[rootContext refreshObject:mo mergeChanges:NO];
}];
}]; …
Run Code Online (Sandbox Code Playgroud) 在我的ASP.Net应用程序中,我正在使用URL路由.
网址格式有点像:http://site/{culture}/project/{id}
.
为了允许用户访问登录和恢复页面,我在web.config中添加了以下条目:
<location path="en-GB/login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="nl-NL/login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<location path="login">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
是否有一种表示形式,以便我可以跳过en-GB部分并用通配符替换它?
无论文化如何,我都希望登录和恢复页面等可用.
我正在处理一个gulp文件,其中包含我的站点的前端和后端的任务.
例如,下面的任务将我的脚本连接到app.js:
gulp.task 'frontend:scripts', ->
gulp.src frontendPath(scriptsFolder, scriptsPattern)
.pipe sourcemaps.init()
.pipe coffee()
.pipe concat 'app.js'
.pipe sourcemaps.write('.')
.pipe gulp.dest frontendPath(tempFolder, scriptsFolder)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我已经创建了一个帮助程序来提供正确的前端路径:
frontendPath = (dirs...) -> path.join.apply null, ['frontend'].concat(dirs)
Run Code Online (Sandbox Code Playgroud)
但我必须非常小心,我的任务的所有步骤(尤其是.src和.dest)都在前端文件夹中执行.
我知道您可以使用该{ cwd: 'frontend' }
选项更改.src和.dest的工作目录.但有没有办法改变任务的整个工作目录?
当我编译我的打字稿项目时,我正在使用该noImplicitAny
选项,以便我不会忘记在我的变量和参数上指定类型.
但是,有时您会有不使用的参数.例如:
jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
return {
abort: function (_, callback: JQueryCallback) {
Run Code Online (Sandbox Code Playgroud)
我对中止函数的第一个参数不感兴趣,所以我通过命名它来忽略它.
这是在TypeScript中这样做的正确方法吗?我在指南中找不到它.我怀疑这不是正确的方法,因为我只能命名一个参数_.
Typescript引发以下错误:
错误TS7006:参数'_'隐式具有'any'类型.
我可以输入,_:any
但对于我不使用的参数来说,这似乎有点矫枉过正.
我想在Hibernate Projection List中获取嵌套对象值.我有Pojo'Charge'和'Tariff'课程,有OneToMany和ManyToOne关系.
我的示例代码如下:
收费
private String id;
private Tariff tariff;
private String name;
@OneToMany(cascade= {CascadeType.ALL},fetch=FetchType.EAGER,mappedBy="charge")
public Tariff getTariff() {
return tariff;
}
public void setTariff(Tariff tariff) {
this.tariff = tariff;
}
Run Code Online (Sandbox Code Playgroud)
关税
private String id;
private String amount;
private Charge charge;
@ManyToOne(cascade={CascadeType.PERSIST},fetch=FetchType.EAGER)
@JoinColumn(name="charge_id")
public Charge getCharge() {
return charge;
}
public void setCharge(Charge charge) {
this.charge = charge;
}
Run Code Online (Sandbox Code Playgroud)
我想通过收费模式从关税中获取金额.
我写sql标准,即工作即.
SELECT tariff.amount,charge.name FROM charge,tariff WHERE charge.name LIKE's%';
我尝试了以下标准.
Criteria cr = getSession().createCriteria(Charge.class,"charge")
.createAlias("charge.tariff","tariff")
.setProjection(Projections.projectionList()
.add(Projections.property("chargeName"),"chargeName")
.add(Projections.property("id"),"id")
.add(Projections.property("tariff.amount"),"amount"))
.add(Restrictions.like("chargeName", …
Run Code Online (Sandbox Code Playgroud) 我们公司正在为iPad开发一个相当大的应用程序.最终,我们希望能够为每个客户(租户)甚至每个用户(该客户)自定义UI.我们从HTML5开始,但正在转向原生.
我已经完成了从服务器下载XML(甚至生成XIB/NIB文件)并动态添加到应用程序的阅读.
现在有了iOS 5(甚至还有6个),故事板正在发挥重要作用.
我的问题:
- 使用(多个?)故事板或XIB会更好吗?
- 如果我想提供动态用户界面,我有哪些选择?
我不是在寻找一个神奇的药丸,也不是关于HTML5与本机的讨论,只是关于我如何提供动态界面以及哪些技术可以帮助这样做的一些信息.
假设我们有一个Product表,Order表和一个(联结表)ProductOrder.
ProductOrder将具有ProductID和OrderID.
在我们的大多数系统中,这些表还有一个名为ID的自动编号列.
放置主键(以及群集密钥)的最佳做法是什么?
我应该保留ID字段的主键并为外键对(ProductID和OrderID)创建非聚集索引
或者我应该放置外键对的主键(ProductID和OrderID)并在ID列上放置非聚集索引(如果需要的话)
或者......(你们其中一个人的聪明话:))
我有以下代码用于发现网络上的服务:
[netServiceBrowser setDelegate: self];
[netServiceBrowser searchForServicesOfType: serviceType inDomain: domain];
Run Code Online (Sandbox Code Playgroud)
这导致调用这两种方法(查找服务和删除服务):
- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser
didFindService:(NSNetService*) netService ... {}
- (void) netServiceBrowser:(NSNetServiceBrowser*) netServiceBrowser
didRemoveService:(NSNetService*) netService ... {}
Run Code Online (Sandbox Code Playgroud)
这很好用.当我关闭设备时,我立即收到didRemoveService调用.
但是,当我打开流(输入,输出或两者)到设备时:
[netService getInputStream: &inputStream outputStream: &outputStream];
[inputStream setDelegate: self];
[outputStream setDelegate: self];
[inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
[inputStream open];
[outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[outputStream open];
Run Code Online (Sandbox Code Playgroud)
它突然需要NSNetServiceBrowser几乎一分钟来检测我关闭了设备
(调用didRemoveService需要一分钟).
我没有与之通信的设备(打开流)仍然会在我删除它们后立即调用didRemoveService.
更新: 这里有一些与我的问题相关的信息.
我跟Wireshark跑了一段路,注意到以下几点:
我在iPad模拟器中启动应用程序,应用程序启动NSNetServiceBrowser并检测打印机.之后,它打开输入/输出流到设备(通过机场快递,USB).打印机正在向我发送状态更新,当我点击应用程序中的测试按钮时,打印机开始打印.在Wireshark中,我看到了与打印机的所有通信.
现在,当我在iPad上启动完全相同的应用程序(并让iPad模拟器运行).应用程序也启动NSNetServiceBrowser,并检测打印机.打印机没有向我发送状态更新,当我点击测试按钮时,打印机没有打印.在Wireshark中,我看到了沟通.打印机或机场接收我的命令并发送ACK包.
一旦我杀死iPad模拟器应用程序,打印机就会开始打印我使用iPad发送的命令.似乎打开一个套接字阻止所有的bonjour事件,我怎么能防止这种情况发生?
asp.net ×1
asp.net-mvc ×1
backend ×1
bonjour ×1
c# ×1
core-data ×1
criteria ×1
datatable ×1
fault ×1
frontend ×1
gulp ×1
hibernate ×1
ienumerable ×1
ios ×1
ios5 ×1
java ×1
master-pages ×1
nib ×1
nsnetservice ×1
objective-c ×1
retain-cycle ×1
sharing ×1
spring ×1
sql ×1
storyboard ×1
stream ×1
task ×1
typescript ×1
url-routing ×1
web-config ×1
webforms ×1
xib ×1