我正在使用Nuget v 2.8.50313.46运行VS2013更新1
你可以跳到这是重要的一点,以及一些最近的更新,并回来参考.
我有一个VS解决方案,这是它的简化表示.
-- Solution
- Base (Class Library)
Packages:
No Packages Installed.
References:
System
System.Configuration
System.Core
System.Runtime.Caching
System.Web
- AppBase (Class Library)
Packages:
No Packages Installed.
References:
System
System.Core
System.Web.Http
Base
- Client (Console Application)
Packages:
EntityFramework v6.1.0
HtmlAgilityPack v1.4.6
References:
EntityFramework
EntityFramework.SqlServer
HtmlAgilityPack
System
System.Core
AppBase
Base
- Server (Web Application)
Packages:
HtmlAgilityPack v1.4.6
Microsoft.AspNet.WebApi v5.1.2
Microsoft.AspNet.WebApi.Client v5.1.2
(dependent on > Newtonsoft.Json v4.5.0)
Microsoft.AspNet.WebApi.Web... v5.1.2
Newtonsoft.Json v6.0.3
References:
HtmlAgilityPack
Newtonsoft.Json
System
System.Net.Http
System.Net.Http.Formatting
System.Web …Run Code Online (Sandbox Code Playgroud) 我的WPF窗口中有一个TextBlock.
<TextBlock>
Some <Bold>formatted</Bold> text.
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
渲染时它看起来像这样,
一些格式化文本.
我的问题是,我可以将此内联"内容"绑定到我的应用程序中的资源吗?
我得到了:
制作应用程序资源字符串,
myText="Some <Bold>formatted</Bold> text."
Run Code Online (Sandbox Code Playgroud)
和以下xaml(为简洁起见,省略了一些代码)
<Window xmlns:props="clr-namespace:MyApp.Properties">
<Window.Resources>
<props:Resources x:Key="Resources"/>
</Window.Resources>
<TextBlock x:Name="Try1"
Text="{Binding Source={StaticResource Resources} Path=myText}"/>
<TextBlock x:Name="Try2">
<Binding Source="{StaticResource Resources}" Path="myText" />
</TextBlock>
</Window>
Run Code Online (Sandbox Code Playgroud)
Try1呈现标签并且不影响格式.
一些<Bold>格式化的<Bold>文本.
Try2不会编译或渲染,因为资源"myText"不是Inline类型而是字符串.
这看似简单的任务是否可能,如果可行,怎么办?
更新 2013年9月18日
看起来没有一种简单的方法可以做到这一点.我正在坚持一个涉及对Entity Framework进行一些扩展的解决方案.
如果您想在实体框架中看到这些功能,请在用户语音网站上投票,也许在此处和此处
关于SO有几个类似的问题,但我找不到一个新问题和类似问题,足以得到我正在寻找的答案.
如果这看起来像信息过载,请跳到In Summary.
背景
我正在编写WebApi REST服务,以通过OData端点公开一些预先存在的数据.我正在使用它EntitySetContoller<TEntity, TKey>为我做所有的咕噜咕噜的工作.除了由基类路由和转换的标准OData参数之外,我还添加了一些自定义参数,以允许我的控制器使用特定功能.
我的数据库服务器是MS SQL Server [BigText] NVarChar[4000],在[SomeEntity]表的列上有一个全文索引.
我有一个限制,我必须使用Code First模型.
// Model POCO
public class SomeEntity
{
public int Id { get; set; }
public string BigText { get; set; }
}
// Simple Controller
public class SomeEntityController : EntitySetController<SomeEntity, int>
{
private readonly SomeDbContext context = new SomeDbContext();
public override IQueryable<SomeEntity> Get()
{
var parameters …Run Code Online (Sandbox Code Playgroud) 我有两个列表,我想比较.所以我创建了一个实现IEqualityComparer接口的类,请参见下面的代码底部.
当我单步GetHashCode执行代码时,代码会通过我的实现而不是Equals?GetHashCode尽管在互联网上阅读以及它到底在做什么,但我并不真正理解这种方法.
List<FactorPayoffs> missingfactorPayoffList =
factorPayoffList.Except(
factorPayoffListOrg,
new FactorPayoffs.Comparer()).ToList();
List<FactorPayoffs> missingfactorPayoffListOrg =
factorPayoffListOrg.Except(
factorPayoffList,
new FactorPayoffs.Comparer()).ToList();
Run Code Online (Sandbox Code Playgroud)
所以在上面的两行代码中,两个列表返回每个项目,告诉我这两个列表不包含任何相同的项目.事实并非如此,只有不同的行.我猜这种情况正在发生,因为该Equals方法没有被调用,这反过来让我想知道我的GetHashCode方法是否正常运作?
class FactorPayoffs
{
public string FactorGroup { get; set; }
public string Factor { get; set; }
public DateTime dtPrice { get; set; }
public DateTime dtPrice_e { get; set; }
public double Ret_USD { get; set; }
public class Comparer : IEqualityComparer<FactorPayoffs>
{
public bool Equals(FactorPayoffs x, FactorPayoffs y)
{ …Run Code Online (Sandbox Code Playgroud) UPDATE
按照奶酪先生的回答,似乎是
public static string Join<T>(string separator, IEnumerable<T> values)
Run Code Online (Sandbox Code Playgroud)
超载string.Join从使用StringBuilderCache类中获得优势.
有没有人对本声明的正确性或原因有任何反馈意见?
我可以写自己的,
public static string Join<T>(
string separator,
string prefix,
string suffix,
IEnumerable<T> values)
Run Code Online (Sandbox Code Playgroud)
使用StringBuilderCache该类的函数?
在提交了我对这个问题的答案后,我得到了一些分析,其中哪个是最佳表现的答案.
我在控制台Program类中编写了这段代码来测试我的想法.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
class Program
{
static void Main()
{
const string delimiter = ",";
const string prefix = "[";
const string suffix = "]";
const int iterations = 1000000;
var sequence = Enumerable.Range(1, …Run Code Online (Sandbox Code Playgroud) 我想在组织中强制执行代码质量和一致的样式。
为此,我计划将Roslyn Analyzers和StyleCop添加到我的项目中。
为了满足我们公认的编码标准,这些分析仪将需要其他配置。理想情况下,将使用.editorconfig进行此类配置,否则,将使用规则集进行配置。
在我的组织中,我们在许多存储库中都有许多项目,许多解决方案。我想尽可能广泛地执行这些标准。我不想将所有分析器软件包和配置都添加到每个项目中,是否有更好,更容易,更容易保持一致的方式来实现这一目标?
我有一个想法,我可以为我的组织制作一个NuGet软件包,其中包含我组织的选定分析器,任何配置以及实际上可能创建的任何自定义分析器。该“捆绑”包可以添加到每个项目中,避免了繁琐且容易出错的重复。这可能吗,甚至是个好主意吗?有人做过吗?
我想出了一些代码来消耗队列中所有的wating项目.而不是逐项处理项目,将所有等待项目作为一组处理是有意义的.
我已经宣布我的队列是这样的.
private BlockingCollection<Item> items =
new BlockingCollection<Item>(new ConcurrentQueue<Item>);
Run Code Online (Sandbox Code Playgroud)
然后,在消费者线程上,我打算像这样批量阅读这些项目,
Item nextItem;
while (this.items.TryTake(out nextItem, -1))
{
var workToDo = new List<Item>();
workToDo.Add(nextItem);
while(this.items.TryTake(out nextItem))
{
workToDo.Add(nextItem);
}
// process workToDo, then go back to the queue.
}
Run Code Online (Sandbox Code Playgroud)
这种方法缺乏实用性,GetConsumingEnumerable我不禁想知道我是否错过了更好的方法,或者我的方法是否存在缺陷.
有没有更好的方法来BlockingCollection<T>批量消费?
编辑发布.Net Core 2.1
重复测试.Net Core 2.1的发布,我得到这样的结果
"Concat"的1000000次迭代耗时842ms.
"新字符串"的1000000次迭代耗时1009ms.
"sb"的1000000次迭代耗时902ms.
简而言之,如果您使用.Net Core 2.1或更高版本,Concat则为王.
我编辑了这个问题,以纳入评论中提出的有效点.
我正在思考我对前一个问题的回答,我开始怀疑,是这样,
return new string(charSequence.ToArray());
Run Code Online (Sandbox Code Playgroud)
将IEnumerable<char>a 转换为a 的最佳方法string.我做了一点搜索,发现这里已经提出了这个问题.那个答案断言,
string.Concat(charSequence)
Run Code Online (Sandbox Code Playgroud)
是一个更好的选择.在回答这个问题后,StringBuilder还提出了一种列举方法,
var sb = new StringBuilder();
foreach (var c in chars)
{
sb.Append(c);
}
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
虽然这可能有点笨拙但我把它包括在内是为了完整性.我决定我应该做一点测试,使用的代码在底部.
当在发布模式下构建时,通过优化,并在没有附加调试器的情况下从命令行运行,我得到这样的结果.
"Concat"的1000000次迭代耗时1597ms.
"新字符串"的1000000次迭代耗时869ms.
"sb"的1000000次迭代耗时748ms.
据我估算,它的new string(...ToArray())速度接近该string.Concat方法的两倍.该StringBuilder是稍快,但仍然是尴尬使用,但可能会延长.
我应该坚持,new string(...ToArray())还是有什么我想念的?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
class Program …Run Code Online (Sandbox Code Playgroud) 我有以下日期时间列值
2015-01-04 20:37:00.000
Run Code Online (Sandbox Code Playgroud)
我在下面试过
cast(cast(MyDateColumn as date) as datetime)+cast(datepart(hour,MyDateColumn ) as float)/24
as MyDateColumn
Run Code Online (Sandbox Code Playgroud)
和
CAST(CONVERT(CHAR(16),MyDateColumn,113) AS datetime) as MyDateColumn
Run Code Online (Sandbox Code Playgroud)
这些对我不起作用
我怎样才能在01-04.2015 20:37之上达到日期时间?