我在vb.net中有一个项目,该项目使用XML Literals来处理大型SQL块,如下所示:

Dim SQL As String =  Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328) .Value
但是似乎找不到与C#等效的东西
有什么建议么?
您是否在问如何编写一个跨C#的字符串常量?
目前尚不清楚您要做什么。 .Value是什么意思?
如果这是一个愚蠢的问题,我深表歉意。我正在学习C#,是的,我想编写一个跨越多行的字符串,因为我有很大的SQL代码块需要放入代码中。在VB.net中,它可以毫无问题地编译,并且可以正常运行。
逐字字符串文字以@开头。像string regex = @"[\w]*";有关C#中的逐字字符串的更多信息
@The_Black_Smurf:在我看来,它看起来像是有效的VB.NET。 SQL看起来也很有效。
您正在使用(滥用)内联XML,VB支持该内联XML,而C#不支持。至于C#,@ Eser让您走上正确的道路。使用string SQL = @"your multiline text here";
嗯,这似乎可以解决问题!谢谢!不确定为什么要投票?
来自我的+1!我喜欢这个问题,因为它教会了许多反对VB.NET的人,他们可能不了解VB.NET。
看来是这样!为什么C#不支持内联XML?
不同的语言支持不同的功能,您可以轻松地问为什么Ruby不支持某些随机Python功能,或者为什么某些Go功能在JavaScript中不可用。只需使用使您以最佳方式完成工作的语言即可。
埃里克·利珀特(Eric Lippert)的话:"一直被问到"为什么C#不实现X功能?"。答案总是一样的:因为没有人设计,指定,实现,测试,记录和发布该功能。这些功能是实现功能所必需的,所有这些功能都需要花费大量的时间,精力和金钱;功能并不便宜,我们会尽力确保仅交付那些能够为您带来最大利益的功能。我们的用户在我们有限的时间,精力和金钱预算的前提下。"
您可以在字符串常量前加上@作为前缀,以跨越多行。唯一需要转义的就是引号(使用双引号)。
string SQL = @"Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)";
第一–
使用多行字符串文字,例如
String sql = @"Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)"
请注意,保留每行开头的字符串和空格内的所有换行符
第二–如果需要任何字符串参数化,请让字符串插值为您工作:
String databaseName ="test"
String tableName ="BarFoo"
String sql = @"Use \{databaseName}
alter table \{tablaName} alter column CouponName nvarchar(328)"
不再像String.Format("Use {0}; alter table {1}", databaseName, tableName)这样的难题
第三名
Visual Basic也已经具有多行字符串文字。请不要更多的XML解决方法。
在VB中使用
Dim sql As String ="Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)"
'and with interpolated strings:
Dim when As String ="since Visual Studio 2015"
Dim note As String = $"String interpolation works {when}, see this VB-specific syntax!"
看来您正在尝试模仿C#中的逐字字符串的行为。这些文字在字符串之前以Leadin @开头,以使编译器不处理字符转义。您唯一需要的字符转义是改为使用""转义"。
所以你的查询看起来像
string query = @"
Use test
alter table BarFoo alter column CouponName nvarchar(328)
alter table Foo alter column IngredientName nvarchar(328)
alter table Bar alter column IngredientShortDescription nvarchar(328)
alter table FooBar alter column ItemName nvarchar(328)";

这包括换行符以及任何前导空格。无论如何,在SQL中,空格都是为了可读性,但要记住,这些文字完全保留了空格。