我在使用新的C#2.0 MongoDB驱动程序和聚合管道时遇到了一些麻烦.
基本上,我试图返回对象上数组字段中最受欢迎的元素.字段类型是:IList<string> FavouritePlaceIds { get; set; }.
我有以下MongoDB聚合,它按预期工作:
db.users.aggregate([
{ $unwind : "$FavouritePlaceIds" },
{ $group: { "_id": "$FavouritePlaceIds", "count": {$sum: 1}}},
{ $sort : { "count": -1 }}
])
Run Code Online (Sandbox Code Playgroud)
但是,现在的问题是尝试使用新的MongoDB驱动程序2.0将其转换为C#代码.我一直在使用以下链接获取有关聚合管道的帮助:http://mongodb.github.io/mongo-csharp-driver/2.0/reference/driver/crud/reading/#unwind
到目前为止,我已经为我的聚合管道提供了以下内容:
var pipeline = usersCollection.Aggregate()
.Unwind(i => i.FavouritePlaceIds)
.Group(i => i.FavouritePlaceIds, g => new { FavouritePlaceIds = g.Key, Count = g.Count() })
.SortByDescending(i => i.Count);
Run Code Online (Sandbox Code Playgroud)
当我去编译该代码时,我得到以下消息:
'BsonDocument'不包含'FavouritePlaceIds'的定义,并且没有扩展方法'FavouritePlaceIds'接受类型'BsonDocument'的第一个参数可以找到...
i => i.FavouritePlaceIdsGroup()方法的第一个参数()发生错误.
阅读小组部分提供的链接上的笔记,它提到:
因为$ unwind是一种投影,所以必须提供返回类型.
所以,我假设我没有指定正确的返回类型,这就是为什么它期望一个BsonDocument对象,并且无法编译.
那么,如何指定要在Group方法中使用的正确返回类型?
我目前正在构建一个ASP.NET MVC应用程序.我正在尝试将项目添加到我的网站中所有页面的ViewBag属性中.为此,我创建了一个基本控制器,我的所有站点控制器都继承了该控制器.
要添加到ViewBag,我已经重写了OnActionExecuting方法: protected override void OnActionExecuting(ActionExecutingContext filterContext)
我知道MVC5的OnActionExecuting方法不是异步的,这就是我遇到这个问题的原因.我需要能够调用以下代码的某种形式来检索最新的项目并将它们放入ViewBag中:
IList<PlaceListItemViewModel> places = await GetLatestPlaces(3);
ViewBag.FooterLatestPlaces = places;
Run Code Online (Sandbox Code Playgroud)
使用GetLatestPlaces(3).Resultjust会造成死锁,所以这不是一个选择.
任何人都可以给我一个如何实现这一目标的选择.它也不必重写OnActionExecuting方法,如果有另一种方法将项添加到每个页面的ViewBag(除了从每个控制器中的每个动作调用代码),我愿意使用该方法.
不幸的是,我不能将GetLatestPlaces方法设置为非异步,因为它使用MongoDB 2.0驱动程序,它始终是异步的.
所以我终于尝试了ReSharper,到目前为止它并不是太糟糕,但它似乎确实取代了很多键绑定.我保留了原始的VS密钥绑定,每当我问到冲突键绑定存在时我想做什么,这很酷.
除此之外,我似乎失去了我的CTRL +.QuickActions窗口/对话框/下拉菜单.我虔诚地使用它来重命名方法和实现接口.
我已经尝试将"View.QuickActions"的VS选项>键绑定重置为CTRL +.但是当我输入该快捷方式时没有任何反应.此外,当我右键单击上下文菜单中选择的"快速操作"时,没有任何反应.
是否有一些我可以实现的新ReSharper"QuickActions",或者重命名变量/方法/类等的关键字绑定,以及实现接口?
我只是想知道是否有人可以指出我关于async/await框架和线程池的正确方向?
基本上,我正在尝试做的是在单独的线程/异步中执行x个操作,但是最多y个线程.
例如,假设我有100个数据库操作:
await _repository.WriteData(someData);
我想要做的是有一些方法一次运行10个这样的操作(理想情况是每个单独的线程,所以10个线程),并且每个完成后,下一个在线程上启动变得可用了.然后我们等待所有操作完成并完成所有线程......
这是否可以轻松实现而无需太多努力或增加大量复杂性?
我正在尝试让ASP.NET MVC5项目在Sublime Text中运行.我已经安装了OmniSharp和Kulture的sublime文本插件.
但是,OmniSharp服务器似乎没有运行,因为我无法获得任何有意义的自动完成选项.我已经按照本指南中的所有步骤进行了操作(除了关于.sln文件的步骤,因为我没有.sln文件,文档.proj自动找到文件).
此外,重命名/转到定义选项似乎根本不起作用.我是否需要以某种方式使用Sublime文本启动OmniSharp服务器?
当我在Atom(http://atom.io)中安装OmniSharp插件时,我必须手动启动OmniSharp插件(ctrl+ alt+ o)然后我按预期获得所有功能.
所以,我只是想知道是否有一些明显的东西让我失踪了?
我在尝试打印带有段落的 FlowDocument 时遇到问题。当我在窗口中显示 FlowDocument 时,段落会正确呈现,没有边框。
但是,当我打印它们时(现阶段我只能测试打印为 PDF,因此我无法确认打印到纸张时这是否仍然是问题),生成的 PDF 文档的每个段落周围都有边框。
打印时如何去除文档中的这些边框?
这是我用来打印 FlowDocument 的代码:
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueue printQueue = localPrintServer.DefaultPrintQueue;
// Create a XpsDocumentWriter object, open a Windows common print dialog.
// This methods returns a ref parameter that represents information about the dimensions of the printer media.
XpsDocumentWriter docWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);
PageImageableArea ia = printQueue.GetPrintCapabilities().PageImageableArea;
PrintTicket pt = printQueue.UserPrintTicket;
if (docWriter != null && ia != null)
{
DocumentPaginator paginator = ((IDocumentPaginatorSource)flowDoc).DocumentPaginator;
// Change the PageSize and …Run Code Online (Sandbox Code Playgroud) - 这已经解决了 -
我已经想出了如何做到这一点,并写了一篇快速文章,解释我是如何做到这一点的:http://juzzbott.com/2010/11/signing-and-verifying-data-within-csharp-encrypting-with-私有密钥排序的/
感谢bjarkef和Henk Holterman花时间向我解释这一点.
干杯
- 原始问题 -
我正在寻找一种使用私钥加密数据的方法,并让公钥解密它.我知道这通常不是你想要的加密,因为任何拥有公钥的人都可以阅读,但这正是我的要求.
我需要通过私钥加密一串数据,这样我才能创建加密数据,并让我的应用程序通过公钥读取它.这背后的想法是为我的应用程序创建许可证文件,加密许可证详细信息,并让应用程序读取此数据.这将阻止许可证由我以外的任何人生成,但是允许应用程序通过公钥读取它.
这样做的想法是控制加密数据,而不关心谁可以读取它,只关心谁可以创建它.
使用的RSACryptoServiceProvider,我可以创建公钥/私钥,我可以当我去的公钥解密用私钥加密不过数据,我得到一个"密钥未找到"的异常.
也不可能使用RSA进行签名,因为我需要将加密数据与纯文本数据进行比较,以确保许可证有效,并且签名仅验证源,而不是它包含的内容.
是否有任何其他加密提供程序可用于完成此操作,或其他一些读取许可证详细信息的方法,即保留私钥,并将公钥分发给我的应用程序以进行许可证验证.
干杯
我在Sitecore v7.1中创建了自定义内容搜索索引.
索引和爬网工作正常,我能够搜索索引并正确返回项目.我遇到的问题是索引有时会填充"爬行根"值之外的项(请参阅下面的配置).
到目前为止的工作是添加模板排除,Sitecore.ContentSearch.Lucene.DefaultIndexConfiguration.config但这很烦人,因为我有很多非内容模板,我不想继续添加到此文件.
我的索引配置如下(这是在配置包含文件中):
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<contentSearch>
<configuration type="Sitecore.ContentSearch.LuceneProvider.LuceneSearchConfiguration, Sitecore.ContentSearch.LuceneProvider">
<indexes hint="list:AddIndex">
<index id="artscentre_web_index" type="Sitecore.ContentSearch.LuceneProvider.SwitchOnRebuildLuceneIndex, Sitecore.ContentSearch.LuceneProvider">
<param desc="name">$(id)</param>
<param desc="folder">$(id)</param>
<!-- This initializes index property store. Id has to be set to the index id -->
<param desc="propertyStore" ref="contentSearch/databasePropertyStore" param1="$(id)" />
<strategies hint="list:AddStrategy">
<!-- NOTE: order of these is controls the execution order -->
<strategy ref="contentSearch/indexUpdateStrategies/onPublishEndAsync" />
</strategies>
<commitPolicyExecutor type="Sitecore.ContentSearch.CommitPolicyExecutor, Sitecore.ContentSearch">
<policies hint="list:AddCommitPolicy">
<policy type="Sitecore.ContentSearch.TimeIntervalCommitPolicy, Sitecore.ContentSearch" />
</policies>
</commitPolicyExecutor>
<locations hint="list:AddCrawler">
<crawler type="Sitecore.ContentSearch.SitecoreItemCrawler, Sitecore.ContentSearch">
<Database>web</Database>
<Root>/sitecore/content/Sites/ArtsCentre/Home</Root> … 我正在尝试从特定形状文件中读取所有特征数据。在本例中,我使用 DotSpatial 打开文件,并迭代这些功能。这个特定的 shapefile 文件大小仅为 9mb,dbf 文件大小为 14mb。大约有 75k 个特征需要循环。
请注意,这一切都是通过控制台应用程序以编程方式进行的,因此不涉及渲染或任何操作。
加载形状文件时,我重新投影,然后进行迭代。加载和重新投影非常快。然而,一旦代码到达我的 foreach 块,就需要将近 2 分钟来加载数据,并且在 VisualStudio 中调试时使用大约 2GB 内存。对于相当小的数据文件来说,这似乎非常非常过分。
我已经在 Visual Studio 之外从命令行运行了相同的代码,但是时间仍然大约是 2 分钟,并且该进程需要大约 1.3GB 的内存。
有什么办法可以加快速度吗?
下面是我的代码:
// Load the shape file and project to GDA94
Shapefile indexMapFile = Shapefile.OpenFile(shapeFilePath);
indexMapFile.Reproject(KnownCoordinateSystems.Geographic.Australia.GeocentricDatumofAustralia1994);
// Get's slow here and takes forever to get to the first item
foreach(IFeature feature in indexMapFile.Features)
{
// Once inside the loop, it's blazingly quick.
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我使用VS立即窗口时,它超级超级快,完全没有延迟......
我在尝试指定构建目录(在将所有文件复制到 DESTDIR 路径之前存储所有文件的目录)时遇到问题。
我的 .pro 文件中有以下值:
DESTDIR = E:/Development/project/build/core/debug
OUT_PWD = E:/Development/project/build/core/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Run Code Online (Sandbox Code Playgroud)
现在,所有文件最终都在该位置,但是在构建期间,编译器始终使用“E:/Development/build/MinGW_32bit-Debug/src/core”文件夹(注意缺少的项目路径)。这很烦人,因为我想使用 /Project/build 目录作为这个位置(在我的 git repo 中没有跟踪)。
理想情况下,我希望这条路径是:E:\Development\project\build\src\core\debug.
我想这样做的原因是构建过程具有相同的位置来包含编译的库(它是一个子目录项目)。
我查看了Tools > Options > Build & Run > General设置,默认构建目录是:build/build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}
我查看了我的 project.pro.user 文件,发现以下行:
DESTDIR = E:/Development/project/build/core/debug
OUT_PWD = E:/Development/project/build/core/debug
OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui
Run Code Online (Sandbox Code Playgroud)
但是我无法更改此值。如果我直接在文件中编辑这一行,只要我再次打开 Qt Creator,更改就会恢复。
这是 Qt Creator 的事情,还是 qmake 的事情?我最好使用不同的构建系统,比如 CMake 吗?
我只是想知道以下代码发生了什么:
class SomeClass {
public:
void someMethod();
private:
bool _someValue;
}
class SomeOtherClass {
friend class SomeClass;
public:
void someOtherMethod();
private:
bool _someOtherValue;
}
Run Code Online (Sandbox Code Playgroud)
我已经在'朋友类'中阅读了以下页面了,似乎朋友类可以访问定义类? http://www.cplusplus.com/doc/tutorial/inheritance/
如果是这样的话,使用friend class SomeClass和继承类之间的区别是什么class SomeOtherClass : SomeClass { }?
我有一个对象集合,每个对象都有一个属性 EventData,它有许多不同的类型。这些类型都继承自IEventData接口。
例如:
{ _id: '...', EventData: { _t: 'TypeA', ... } }
{ _id: '...', EventData: { _t: 'TypeB', ... } }
Run Code Online (Sandbox Code Playgroud)
我当前在尝试注册类映射时遇到 MongoDB C# 驱动程序的问题。当使用通用版本注册类映射时,EventData 对象使用所有属性和类型鉴别器正确序列化:
BsonClassMap.RegisterClassMap<TypeA>();
// Full event data is written to collection
// { _id: '...', EventData: { _t: 'TypeA', InterfaceProperty: '...', ClassProperty: '...' } }
Run Code Online (Sandbox Code Playgroud)
这工作正常,但是我有大量不同的事件类型,并且想要尝试使用一些反射来帮助自动化此操作。当尝试使用 RegisterClassMap 的非通用版本,同时迭代实现 IEventData 接口的所有类型时,只有接口成员被序列化:
var types = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(i => i.GetTypes())
.Where(t => typeof(IEventData).IsAssignableFrom(t));
foreach (var type in types)
{
// If it's an interface, skip …Run Code Online (Sandbox Code Playgroud) c# ×6
async-await ×2
mongodb ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
autocomplete ×1
c++ ×1
class ×1
cryptography ×1
dotspatial ×1
lucene ×1
omnisharp ×1
printing ×1
qt ×1
reflection ×1
resharper ×1
shapefile ×1
sitecore ×1
sitecore7 ×1
sublimetext3 ×1
wpf ×1