当我在c#中逐步执行代码(不确定它是否是VB.NET中的问题)并查看存储在字符串变量中的SQL时,有时我喜欢将其复制并粘贴到记事本或我的SQL程序中.但是,如果它包含回车符,它实际上会复制到我的剪贴板中line1\r\nline2
.是否存在使用实际回车而不是回车转义代码复制此方法的本机方法?
编辑:这也适用于显示为的标签\t
.发生这种情况是因为我的代码是从文本文件中读取SQL而文本文件包含回车符和制表符.另一种方法是1)在SQL中没有任何回车符或制表符(这使得丑陋的SQL)或2)在将SQL读入我的字符串变量时将它们删除.不过,为了简化调试过程,我并不是真的热衷于这些选项.
debugging copy-paste watch visual-studio-2010 carriage-return
VB.NET是否支持表达式身份的成员?到目前为止,它似乎在c#中有所有内容,如null条件,nameof,插值字符串,仅可通过ctor访问的脱胎自动属性等.
在c#中,语法是:
string FullName => FirstName + " " + LastName;
Run Code Online (Sandbox Code Playgroud)
我怎样才能在VB.NET中实现这一点?
在早期版本的Excel中,在工作表中按CTRL + A将逐字地选择所有单元格.在Excel 2010中(不确定2007或2003),我注意到如果在包含值的单元格块中按CTRL + A,似乎只知道选择该块中的单元格.例如,如果范围A1:D10中的所有单元格都包含值,并且当活动单元格在该范围内时您按CTRL + A,则它将仅选择A1:D10.如果再次按CTRL + A,它将实际选择工作表中的所有单元格.
所以我记录了一个宏来查看我执行此操作时生成的宏代码,但实际上Range("A1:D10").Select
当我按下CTRL + A时它会写入.这是限制性的而不是动态的,因为现在我必须编写自己的逻辑来确定活动单元格周围的边界.对于像这样的方法来说并不困难ActiveCell.End(xlDown)
,但我不想在这里重新发明轮子.
有一些Excel VBA方法ActiveCell.GetOuterRange.Select
吗?那样就好了.
我有一个Web API应用程序,它将JSON返回给可能没有使用Microsoft技术的消费者.当我的控制器返回一个DateTime属性为JSON的对象时,它以这种格式序列化日期:
2017-03-15T00:00:00-04:00
这让消费者有点头疼,因为他们期望它采用ISO 8601格式.一些研究告诉我,JSON.NET现在默认使用ISO 8601(我使用的是9.0.1).当我运行此代码时......
Clipboard.Copy(JsonConvert.SerializeObject(DateTime.Now));
Run Code Online (Sandbox Code Playgroud)
......我明白了:
2017-03-15T09:10:13.8105498-04:00
Run Code Online (Sandbox Code Playgroud)
维基百科在表达完整日期和时间时将这些显示为有效的ISO 8601格式:
2017-03-15T11:45:42+00:00
2017-03-15T11:45:42Z
20170315T114542Z
Run Code Online (Sandbox Code Playgroud)
但是,我上面得到的输出并不完全匹配.我想要使用格式化程序2017-03-15T11:45:42Z
.
并且可能完全值得另外一个问题,在我的Web API配置中添加以下行似乎被忽略,因为它继续在上面最初显示的日期返回JSON:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
Run Code Online (Sandbox Code Playgroud)
我假设一旦找出核心问题,Web API问题也可能得到解决.
我甚至不知道它是否被称为别名,但无论如何让我继续.
你知道C#中的System.String类型是如何用"字符串"排序"别名"的?在Visual Studio中,"string"是小写和蓝色文本.我想对一些冗长的班级名字这样做.有些都像"RelocatedPlantProductReleaseItem".我无法更改它的名称,但这么长的名字确实使代码啰嗦.我希望能够使用"Rppr"代替.所以不是这样的:
RelocatedPlantProductReleaseItem Item = new RelocatedPlantProductReleaseItem();
我会像:
Rppr Item = new Rppr();
我知道我可以创建一个名为Rppr的类,并让它继承自RelocatedPlantProductReleaseItem,但这看起来很糟糕.
此外,我上面给出的场景完全是虚构的.我只是用它来演示我想要实现的基本功能.
另外,当"string"表示System.String时,技术上称之为什么?
更新:感谢所有答案,伙计们,但我想我应该指明我希望这是一个全球性的事情.我不想在每个代码文件的顶部指定它.我想在一个地方指定它,它在整个应用程序中的任何地方都可以工作,即使在引用其程序集的其他程序集中也是如此.
新赏金2017/10/31
遗憾的是,由于TPC限制,自动接受的答案不适用于我当前的实体模型.我迫切需要找到一种方法来通过接口或抽象类来促进双向导航,所以我开始了另一个赏金.
请注意,我必须使用现有的模型设计,因此重构不是一种选择.
原始问题如下
我有一个父实体,它与多个可能的表有一对一的关系(FK在子表上).因为子节点的导航属性是由接口定义的,所以我没有导航到关系的另一端.
我知道这是一个自然的限制,但仍然寻求一种在使用抽象类型或泛型时实现双向导航的方法.我遇到了一些类似于我想做的问题,但它们要么已经很老了,要么我认为它们与我想要实现的完全匹配.我寻求一个特定于我的困境的更新的答案.
这是我的代码,可以轻松地复制/粘贴到测试应用程序中:
编辑(响应Ivan Stoev的回答):当我尝试实施您的解决方案时,我在尝试创建迁移时遇到此错误:
The association 'SoftwareApplicationData_CreatedBy' between entity types 'SoftwareApplicationData' and 'AppUser' is invalid. In a TPC hierarchy independent associations are only allowed on the most derived types.
所以看来我需要编辑我的原始代码以反映我最初为简洁而省略的更复杂的模型.我道歉,因为我认为其他代码到目前为止并不相关.
请注意,我现在所有实体都继承自MyEntity
.
结束编辑
public abstract class MyEntity
{
public int Id { get; set; }
public AppUser CreatedBy { get; set; }
}
public class AppUser : MyEntity { }
public interface ISoftwareApplicationData
{
SoftwareApplicationBase Application { get; set; }
}
//Parent entity …
Run Code Online (Sandbox Code Playgroud) .net abstract-class entity-framework interface entity-framework-6
我不记得我以前的版本(它可能是 16.8.1),但是现在更新到 16.8.4 导致我的解决方案项目都无法加载。这是我的解决方案之一的输出窗口:
F:\Users\username\Documents\Visual Studio Projects\FitnessManagerCore\FitnessManagerCore\FitnessManagerCore.csproj : error : The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn\Microsoft.CSharp.Core.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn\Microsoft.CSharp.Core.targets" is correct, and that the file exists on disk. C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.CSharp.CurrentVersion.targets
F:\Users\username\Documents\Visual Studio Projects\GeneralUtilities\GeneralUtilities\GeneralUtilities.csproj : error : The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn\Microsoft.CSharp.Core.targets" was not found. Confirm that the expression in the Import declaration "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Roslyn\Microsoft.CSharp.Core.targets" is correct, …
Run Code Online (Sandbox Code Playgroud) 我已经尝试了一些我在互联网上看过的例子,但我似乎无法弄明白.这是Teradata数据库.
我有TableA,它有CustomerId和DepartmentId.
我有TableB,也是CustomerId和DepartmentId.
我知道这种结构不实用,但这是一个高度非标准化的数据库,我们从离岸开发团队接管,我们必须使用我们拥有的.
我想要做的是在CustomerId上连接TableA和TableB,然后将TableB的DepartmentId设置为TableA中的内容.我非常感谢正确的语法.
我有一个抽象类,有两个构造函数.当另一个类继承这个类时,似乎我必须声明具有与基类中相同签名的构造函数.这对我来说似乎有点多余.有没有办法Sub New(Parameter as MyClass)
在我的基类中使用并使它成为默认的构造函数签名,除非派生类在其定义中包含它?
为清晰起见编辑:我希望暗示我不想在调用基类的派生类中创建构造函数.我希望能够做到这一点:
Mustinherit Class MyBase
Sub New(MyParam As String)
End Sub
End Class
Class MyDerived
Inherits MyBase
End Class
Run Code Online (Sandbox Code Playgroud)
请注意,派生类现在不调用基类?
完全重写这个问题,因为我现在比以前更了解这个问题.
我试图抽象出OData查询字符串直接转换为.NET表达式树.似乎有一些关于这个问题和文章,但没有提供一个依赖一个抽象的解决答案索利的Microsoft.Data.OData
命名空间(即,所有的例子依靠的WebAPI,实体框架,或其他一些库).
在提供抽象解决方案方面做得最好的答案如下:
这两行让我开始:
IEdmModel model = EdmxReader.Parse(new XmlTextReader(/*stream of your $metadata file*/));
IEdmEntityType type = model.FindType("organisation");
Run Code Online (Sandbox Code Playgroud)
经过多次努力,我了解到OData需要EDM才能生成自己专有的表达式树模型.这只是一个模特.您必须遍历该模型才能最终生成自己的表达式树.
所以我已经做了所有这些(有点).我碰巧在这篇文章中向我展示了如何在没有任何导航的情况下创建基本的EDM:
使用它,我最终创建了一个EDM生成器,通过类递归反映来构建EDM.问题是,这非常复杂,并且在线没有关于如何动态创建EDM的信息,因此它没有定义任何导航属性,只能用于单个实体.
然后我创建了一个模仿的ODataExpressionVisitor System.Linq.Expressions.ExpressionVisitor
.它的效果非常好.它能够获取此OData查询字符串:
var filter = ODataUriParser.ParseFilter(
"(Name eq 'Oxford Mall' or Street eq '123 whatever ln') and Id eq 2",
edmBuilder.Model, edmBuilder.Model.FindType(typeof(CustomerLocation).FullName));
Run Code Online (Sandbox Code Playgroud)
并生成此表达式:
(
$CustomerLocation.Name == "Oxford Mall" ||
$CustomerLocation.Street == "123 whatever ln"
) &&
$CustomerLocation.Id == 2
Run Code Online (Sandbox Code Playgroud)
它也可以工作,因为我可以将它编译为一个delagate并将一个CustomerLocation
对象传递给它,它将返回正确的true/false.不过,我还没有使用EF6或其他基于表达式的框架进行测试.
但是,我想我在这里重新制作一个轮子.必须存在以下方法:1)仅从类生成基于约定的EDM,以及2)将得到的OData表达式树转换为.NET表达式树.
.net ×2
vb.net ×2
alias ×1
c# ×1
constructor ×1
copy-paste ×1
debugging ×1
excel ×1
excel-2010 ×1
excel-vba ×1
expression ×1
interface ×1
iso8601 ×1
join ×1
json ×1
json.net ×1
odata ×1
properties ×1
range ×1
sql ×1
teradata ×1
vba ×1
watch ×1