在一个通用的抽象基类中,我存储了几个用于排序的表达式:
public Expression<Func<T, string>> OrderByString { get; set; }
public Expression<Func<T, int>> OrderByInt { get; set; }
Run Code Online (Sandbox Code Playgroud)
稍后将在通用基类中使用:
if (OrderByString != null)
{
results = results.OrderBy(OrderByString);
}
else if (OrderByInt != null)
{
results = results.OrderBy(OrderByInt);
}
Run Code Online (Sandbox Code Playgroud)
最后,其中一个将在派生具体类的构造函数中设置:
this.OrderByString = c => c.CustomerID;
Run Code Online (Sandbox Code Playgroud)
我不喜欢这样的事实,即我需要根据我想要OrderBy的属性类型使用单独的表达式.ToString不适用于属性,因为LINQ to Entities不支持它.我所追求的是一种存储表达式的方法,该表达式选择任何要订购的属性,而不管类型如何.
如果我尝试一些更通用的东西,例如:
public Expression<Func<T, object>> Order { get; set; }
Run Code Online (Sandbox Code Playgroud)
无法将类型"System.Int32"强制转换为"System.Object"类型.LINQ to Entities仅支持转换实体数据模型基元类型.
此外,如果我尝试轻微的黑客,这也不起作用:
public Expression<Func<T, string>> Order { get; set; }
this.Order = c => c.OrderID.ToString();
Run Code Online (Sandbox Code Playgroud)
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储表达式.
我正在SSIS中做一些ETL来构建一些维度数据集.其中一个是约会.为维度生成一组日期时,我可以使用查找日期维度中已有的日期并重定向任何失败的日期,这些日期将被假定为新日期,然后添加到表格中.
问题是我得到的数据集本身可能包含重复的日期.插入维度表时,这将导致唯一日期键出错.所以我正在寻找一种在SSIS管道中加载的数据集中进行过滤的方法.
我可以在初始加载日期时使用DISTINCT,但在这种情况下的日期是DATETIME.我需要稍后使用数据转换转换,只需获取日期组件即可将其转换为DATE.我正在寻找独特的日子,DATETIME上的一个独特的日子不会给我这个.
我不能像以前那样使用SSIS查找,因为它需要一个指向数据库的连接管理器.
我可以告诉OLE DB目标不使用批量插入忽略任何错误.然而,这假定唯一的错误是重复日期.
我是SSIS的新手,并且无法找到允许我与集合中的其他行进行比较的转换工具.
我有一个自定义下拉菜单,可以包含数千个项目.这是最糟糕的情况,大部分时间都是数百或更少,而且速度非常快.
当菜单打开时,我已经延迟了元素(li)的插入,但是当它被打开时点击它会导致几秒钟的可察觉的延迟.
我在javascript中构建了一个包含所有列表项的字符串,并使用单个innerHtml赋值添加它.这是内部HTML分配,一直需要.我也尝试过使用片段并附加到片段以及使用片段并单独附加每个项目都无济于事.插入时间如下:
Text Li/InnerHTML Li/Inner/Fragment CreateLI/Fragment
Chrome 13ms 40ms 48ms 138ms
IE9 22ms 2402ms 2364ms 7934ms
IE11 19ms 1952ms 2330ms 4208ms
Run Code Online (Sandbox Code Playgroud)
第一列是插入所有内容,但在单个innerHTML调用中插入pre标签内的文本和新行.不幸的是,样式和事件等都需要li.
第二列是添加所有内容,但每个内容都包含在一个innerHTML调用中的li标签中.
如上所述的第三列,但使用片段然后附加该片段.
如上所述的列,但每个li作为单独的create添加并附加到片段.
不幸的是IE(我们正在移动到IE11周围的圣诞节)是目标浏览器 - 企业内部网:-(
我试图减轻这一点的一件事就是插入第一个,比方说50个项目.所以打开菜单很快但滚动时,我必须再次加载50个批次到滚动点的后续项目.IE不够快,因此大多数时候你什么都看不到,当拖动滚动条时它会保持锁定,向前跳,锁定等因为当你试图滚动时innerHTML调用会阻塞整个浏览器.
我尝试过的另一种技术是插入前50个项目,然后以50毫秒的间隔加载剩余的50个块,以阻止所有内容.不幸的是,这会导致更糟糕的体验,因为页面响应性在上一个示例中滚动时会像在滚动时一样,但在这里您甚至不必滚动,它总是在添加所有项目之前执行.
我现在已经没想到了.如何让IE更快地工作?
我想以编程方式创建它,以便用户只能看到列表中的特定项目.
基本上在创建项目时运行的工作流程中,我将做一些事情,并通知一些人这个项目.我还希望它更改项目的权限,以便只有特定用户(根据项目内容查找运行时)才能读取该项目.有权访问该列表的其他用户只能看到特定的项目,但不会看到所有这些项目.列表项可能不一定是拥有的,而是需要查看它的用户,因此我无法设置列表权限以允许用户只看到自己的项目.
如果有帮助,请将其置于上下文中 - 列表正在向特定成员注册工作角色.每个列表项都是一个角色分配,其中包含对角色列表中角色的查找以及对成员列表中成员的查找.我不是直接在成员列表中使用了一个multilookup字段用于角色,因为每个角色分配都需要有关它的额外信息,例如描述,开始日期等.每个角色都有一个管理它的特定用户/组.我想要它,以便在进入这个大的角色分配列表时,用户只能看到他们作为管理者的角色的角色分配.
建议将不胜感激.
我想手动调用SharePoint服务器上安装的计时器作业.什么是有用的是stsadm命令的行.
我的方案是,我已经为客户服务器部署了一系列功能的解决方案.我不想等待每周的时间表来启动特定的计时器工作.我想打一个命令来让特定的工作立即运行.显然,在开发环境中,我已经将时间表设置为几分钟,但我想在我与客户现场时进行测试.
我正在做的是查找哈希表中特定字段的值.该对象可以是少数原始类型,它们的值注定要放在XML中,但它来自哈希表作为对象.所以我有需要决定类型是什么的问题,将其抛出然后使用ToString类型.如果我不需要强制转换它会很好但是它会在对象类型上调用ToString而不是在实际类型上调用对应方法.
以下代码在功能上是正确的,但我对它不满意.也许遵循这条舒适的道路将导致我成为一个纯粹主义者.无论哪种方式,我都非常欣赏一种更好的方法来写这个如果存在的话.
public string GetColumnValue(string columnName)
{
object value = item[columnName];
if (value == null)
return string.Empty;
if (value.GetType() == typeof(string))
{
return (string)value;
}
else if (value.GetType() == typeof(double))
{
return ((double)value).ToString();
}
...
}
Run Code Online (Sandbox Code Playgroud) 我有一组托管在WCF Web Api的服务,我通过javascript用JSON与它们进行通信.在大多数情况下,我可以修改标头的接受位以要求JSON响应但是在某些情况下我无法做到这一点.这是由于我正在使用的javascript框架(Ext JS).对于某些事情,它只允许我指定一个URL而不是代理默认值,如标题.
但这不是Ext JS的问题.Web Api似乎默认返回XML,我想知道是否可以更改此默认值以便它可以返回JSON.提前致谢!
在查询XmlDocument时,我需要在每次调用时传递命名空间管理器.真烦人,但这只是我们生活的东西.真正讨厌的一点是首先创建命名空间管理器.
XmlNamespaceManager nsMan = new XmlNamespaceManager(invoiceTextReader.NameTable);
nsMan.AddNamespace("", "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2");
nsMan.AddNamespace("pb", "urn:pierbridge:names:specification:pbl:schema:xsd:tpn-1");
...
Run Code Online (Sandbox Code Playgroud)
要创建它,我不仅要使用nametable为实例设定种子,还要手动指定每个命名空间.这对我来说似乎很愚蠢.如果我必须手动添加它们,那么传递名称表的重点是什么.如果我需要为每个查询传递命名空间管理器,那么传递名称表的重点是什么.为什么它不能直接从文档中包含的内容构建命名空间管理器.看起来只是为了运行一个查询而烦恼不已.
我首先使用实体框架代码并通过WCF REST HTTP接口公开northwind数据库.
我没有公开OrderDetails表(订单商品),因为创建订单然后通过另一个服务单独添加每个所需的OrderDetail是没有意义的.在我看来,它需要是一个成功或失败的原子事务.因此,我在传递给客户端时包含Order.OrderDetails集合,并假设在创建或更新订单时我将获得一个.
然而,问题似乎是在重新附加Order实体以进行更新时检测OrderDetails集合的更改.订单本身可以设置为已修改以更新这些属性,但这不会级联到OrderDetail项目.所以我可以手动完成并设置更新的修改后的问题,但问题在于找出哪些是首先更新的.将新的OrderDetail设置为modified会在尝试保存时导致错误.
我读了一条建议,将新集合项的Id设置为0,并在服务器中使用它来决定它是新的还是现有的.然而,Northwind在OrderDetails的OrderID和ProductID之间使用复合键.这些都必须由客户端设置,所以我找不到一种方法来检测新的.此外,已删除的OrderDetail将不存在于分离图中,我将需要弄清楚已删除的内容并明确删除它.
任何建议将不胜感激.
public override Order Update(Order entity)
{
dbset.Attach(entity);
DataContext.Entry(entity).State = EntityState.Modified;
foreach (var orderDetail in entity.OrderDetails)
{
DataContext.Entry(orderDetail).State = EntityState.Modified;
}
return entity;
}
Run Code Online (Sandbox Code Playgroud) 我有一个MVC动作,目前返回PDF:
return File(File.OpenRead(pdfPath), "application/pdf");
Run Code Online (Sandbox Code Playgroud)
这是一种简化.如果文件存在,那么我们直接进入OpenRead,但在其他情况下,需要首先检索或生成.这部分可能导致客户端等待HTTP响应的实质性延迟.
我想知道是否有一种方法可以让MVC立即返回流,但只有在文件可用时才开始写入.
这样,PDF客户端(内置的chromes)将从一开始就显示加载微调器,而不仅仅是在流正在传输时.
c# ×6
sharepoint ×3
ajax ×1
asp.net-mvc ×1
casting ×1
dom ×1
html ×1
javascript ×1
linq ×1
listitem ×1
performance ×1
permissions ×1
rest ×1
sql ×1
sql-server ×1
ssis ×1
streaming ×1
timer-jobs ×1
wcf ×1
wcf-web-api ×1
workflow ×1
xml ×1