Sqlserver SqlFunc.Subqueryable子查询 nvarchar 标识失效 返回

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using SqlSugar;
namespace OrmTest
{
class Program
{
static void Main(string[] args)
{
var db = new SqlSugarScope(new SqlSugar.ConnectionConfig()
{
ConnectionString = "server=.;uid=sa;pwd=sasa;database=SQLSUGAR4XTEST",
DbType = DbType.SqlServer,
IsAutoCloseConnection = true
});
//建表
db.CodeFirst.InitTables<Test>();
//清空表
db.DbMaintenance.TruncateTable<Test>();
var insertdata = new List<Test>() { new Test() { Name = "漫画", Type = "书本" }, new Test() { Name = "间谍过家家", Type = "漫画" },
new Test() { Name = "古籍", Type = "书本" }, new Test() { Name = "红楼梦", Type = "古籍" } };
//插入测试数据
var result = db.Insertable(insertdata).ExecuteCommand();//用例代码
var data = db.Queryable<Test>().Where(i =>i.Type= "漫画"&&SqlFunc.Subqueryable<Test>().Where(s => s.Type == i.Name).NotAny()).Select(i => new()
{
Name = i.Name,
Type = i.Type,
TypeData = SqlFunc.Subqueryable<Test>().Where(b => b.Type == i.Name).ToList()
}).Tolist();
Console.WriteLine(result);
Console.WriteLine($"漫画书本有:{data.TypeData.Count()}本");
Console.WriteLine("用例跑完");
Console.ReadKey();
}
//建类
public class Test
{
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "name")]
public string? Name { get; set; }
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "Type")]
public string? Type { get; set; }
}
}
}
热忱回答(36)
-
fate sta VIP0
1周前ColumnDataType = "nvarchar(50)" 是用来建表的 ,和查询没任何关系
0 回复 -
fate sta VIP0
1周前你的问题是报错还是什么
0 回复 -
本号已停用 VIP0
1周前@fate sta:查询不出来数据TypeData 子查询应该可以获取出1条数据,我看加了ColumnDataType = "nvarchar(50)"的SqlServer查询语句生成的N' 去处理nvarchar类型的
0 回复 -
本号已停用 VIP0
1周前如果去ColumnDataType = "nvarchar(50)" ToSqlString()的sqlserver 语句就不会含有N'去识别为Unicode 字符,这样的话data也会一条数据都查不到
0 回复 -
本号已停用 VIP0
1周前@fate sta:您可以试一下去ColumnDataType = "nvarchar(50)" 数据库改为Mysql,这个时候会输出 漫画书本有:1本 而sqlserver则只会输出 漫画书本有:0本
0 回复 -
fate sta VIP0
1周前@本号已停用:
你的代码少了一个=,应该写成=="漫画"
0 回复 -
本号已停用 VIP0
1周前@fate sta:不好意思改案例的时候没注意了,这个Sqlserver的Nvarchar子查询问题有机会解决吗?
0 回复 -
fate sta VIP0
1周前@本号已停用:你改了测试了吗?
0 回复 -
fate sta VIP0
1周前你的代码有问题
0 回复 -
本号已停用 VIP0
1周前@fate sta:改了测试是一样的mysql输出1本。sqlserver 为0本,是我sqlserver问题?
0 回复 -
fate sta VIP0
1周前0 回复 -
fate sta VIP0
1周前我用sqlserver显示是一本书
0 回复 -
fate sta VIP0
1周前select先删掉 ,然后用sqlprofile监控一下SQL ,拿出监控出来的SQL去数据库测试
0 回复 -
fate sta VIP0
1周前返回1条正常
0 回复 -
fate sta VIP0
1周前String是nvarchar ,anistring是varchar 传的也没有错
db.Aop.OnLogExecuting = (x, y) => { Console.WriteLine(UtilMethods.GetNativeSql(x,y)); };
0 回复 -
本号已停用 VIP0
1周前SqlServer
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using SqlSugar;
namespace OrmTest
{
class Program
{
static void Main(string[] args)
{
var db = new SqlSugarScope(new SqlSugar.ConnectionConfig()
{
ConnectionString = "server=appdnan57;uid=MockUser;pwd=Mock@User_666;database=MesMock;Encrypt=True;TrustServerCertificate=True;",
DbType = SqlSugar.DbType.SqlServer,
IsAutoCloseConnection = true
});
//建表
db.CodeFirst.InitTables<Test>();
//清空表
db.DbMaintenance.TruncateTable<Test>();
var insertdata = new List<Test>() { new Test() { Name = "漫画", Type = "书本" }, new Test() { Name = "间谍过家家", Type = "漫画" },
new Test() { Name = "红楼梦", Type = "古籍" } };
//插入测试数据
var result = db.Insertable(insertdata).ExecuteCommand();//用例代码
var data = db.Queryable<Test>().Where(i => i.Type == "书本" && SqlFunc.Subqueryable<Test>().Where(s => s.Name == i.Type).NotAny()).Select(i => new
{
Name = i.Name,
Type = i.Type,
TypeData = SqlFunc.Subqueryable<Test>().Where(b => b.Type == i.Name).ToList()
}).ToList();
Console.WriteLine(result);
Console.WriteLine($"漫画书本有:{data.First().TypeData.Count()}本");
Console.WriteLine("用例跑完");
Console.ReadKey();
}
//建类
public class Test
{
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "name")]
public string? Name { get; set; }
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "Type")]
public string? Type { get; set; }
}
}
}
0 回复 -
fate sta VIP0
1周前又发一遍是什么意思
和刚才有什么不一样吗?
0 回复 -
本号已停用 VIP0
1周前Mysql
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using SqlSugar;
namespace OrmTest
{
class Program
{
static void Main(string[] args)
{
var db = new SqlSugarScope(new SqlSugar.ConnectionConfig()
{
ConnectionString = "",
DbType = SqlSugar.DbType.MySql,
IsAutoCloseConnection = true
});
//建表
db.CodeFirst.InitTables<Test>();
//清空表
//db.DbMaintenance.TruncateTable<Test>();
//var insertdata = new List<Test>() { new Test() { Name = "漫画", Type = "书本" }, new Test() { Name = "间谍过家家", Type = "漫画" },
// new Test() { Name = "红楼梦", Type = "古籍" } };
//插入测试数据
//var result = db.Insertable(insertdata).ExecuteCommand();//用例代码
var data = db.Queryable<Test>().Where(i => i.Type == "书本" && SqlFunc.Subqueryable<Test>().Where(s => s.Name == i.Type).NotAny()).Select(i => new
{
Name = i.Name,
Type = i.Type,
TypeData = SqlFunc.Subqueryable<Test>().Where(b => b.Type == i.Name).ToList()
}).ToList();
//Console.WriteLine(result);
Console.WriteLine($"漫画书本有:{data.First().TypeData.Count()}本");
Console.WriteLine("用例跑完");
Console.ReadKey();
}
//建类
public class Test
{
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "name")]
public string? Name { get; set; }
[SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "Type")]
public string? Type { get; set; }
}
}
}
0 回复 -
fate sta VIP0
1周前和刚有什么不一样。sqlserver我跑了有记录
0 回复 -
fate sta VIP0
1周前还有select先删掉你的用例暂时用不到select
0 回复 -
本号已停用 VIP0
1周前0 回复 -
本号已停用 VIP0
1周前0 回复 -
本号已停用 VIP0
1周前我的需求就是在select中调用子查询加父级字段数据获取数据,所以要这个select
0 回复 -
fate sta VIP0
1周前@本号已停用: 你是select中的数据是0还是 外面的的list数据是0描述清楚问题
0 回复 -
fate sta VIP0
1周前using SqlSugar; using System; namespace OrmTest { using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using SqlSugar; namespace OrmTest { class Program { static void Main(string[] args) { var db = DbHelper.GetNewDb(); db.Aop.OnLogExecuting = (x, y) => { Console.WriteLine(UtilMethods.GetNativeSql(x,y)); }; //建表 db.CodeFirst.InitTables<Test>(); //清空表 db.DbMaintenance.TruncateTable<Test>(); var insertdata = new List<Test>() { new Test() { Name = "漫画", Type = "书本" }, new Test() { Name = "间谍过家家", Type = "漫画" }, new Test() { Name = "红楼梦", Type = "古籍" } }; //插入测试数据 var result = db.Insertable(insertdata).ExecuteCommand();//用例代码 var data = db.Queryable<Test>().Where(i => i.Type == "书本" && SqlFunc.Subqueryable<Test>().Where(s => s.Name == i.Type).NotAny()).Select(i => new { Name = i.Name, Type = i.Type, TypeData = SqlFunc.Subqueryable<Test>().Where(b => b.Type == i.Name).ToList() }).ToList(); Console.WriteLine(result); Console.WriteLine("用例跑完"); Console.ReadKey(); } [SugarTable("UnitTestdafa")] public class Test { [SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "name")] public string? Name { get; set; } [SugarColumn(ColumnDataType = "nvarchar(50)", ColumnName = "Type")] public string? Type { get; set; } } } } /// <summary> /// Helper class for database operations /// 数据库操作的辅助类 /// </summary> public class DbHelper { /// <summary> /// Database connection string /// 数据库连接字符串 /// </summary> public readonly static string Connection = "server=.;uid=sa;pwd=sasa;database=SqlSugar5Demo;Encrypt=True;TrustServerCertificate=True"; /// <summary> /// Get a new SqlSugarClient instance with specific configurations /// 获取具有特定配置的新 SqlSugarClient 实例 /// </summary> /// <returns>SqlSugarClient instance</returns> public static SqlSugarClient GetNewDb() { var db = new SqlSugarClient(new ConnectionConfig() { IsAutoCloseConnection = true, DbType = SqlSugar.DbType.SqlServer, ConnectionString = Connection, LanguageType=LanguageType.Default//Set language }, it => { // Logging SQL statements and parameters before execution // 在执行前记录 SQL 语句和参数 it.Aop.OnLogExecuting = (sql, para) => { Console.WriteLine(UtilMethods.GetNativeSql(sql, para)); }; }); return db; } } }
我测试下来有记录
0 回复 -
fate sta VIP0
1周前0 回复 -
本号已停用 VIP0
1周前0 回复 -
本号已停用 VIP0
1周前我用您的代码还是显示为0 ,是需要改SqlServer种的什么配置吗?
运行生成的Sql是这样的:[Sql]:IF EXISTS (SELECT * FROM sys.objects with(nolock)
WHERE type='u' AND name=N'UnitTestdafa')
SELECT 1 AS res ELSE SELECT 0 AS res;
[Sql]:CREATE TABLE [UnitTestdafa](
[name] nvarchar(50) NOT NULL ,
[Type] nvarchar(50) NOT NULL )
[Sql]:SELECT sysobjects.name AS TableName,
syscolumns.Id AS TableId,
syscolumns.name AS DbColumnName,
systypes.name AS DataType,
COLUMNPROPERTY(syscolumns.id,syscolumns.name,'PRECISION') as [length],
isnull(COLUMNPROPERTY(syscolumns.id,syscolumns.name,'Scale'),0) as Scale,
isnull(COLUMNPROPERTY(syscolumns.id,syscolumns.name,'Scale'),0) as DecimalDigits,
Cast( sys.extended_properties.[value] as nvarchar(2000)) AS [ColumnDescription],
syscomments.text AS DefaultValue,
syscolumns.isnullable AS IsNullable,
columnproperty(syscolumns.id,syscolumns.name,'IsIdentity')as IsIdentity,
(CASE
WHEN EXISTS
(
select 1
from sysindexes i
join sysindexkeys k on i.id = k.id and i.indid = k.indid
join sysobjects o on i.id = o.id
join syscolumns c on i.id=c.id and k.colid = c.colid
where o.xtype = 'U'
and exists(select 1 from sysobjects where xtype = 'PK' and name = i.name)
and o.name=sysobjects.name and c.name=syscolumns.name
) THEN 1
ELSE 0
END) AS IsPrimaryKey
FROM syscolumns
INNER JOIN systypes ON syscolumns.xtype = systypes.xtype
LEFT JOIN sysobjects ON syscolumns.id = sysobjects.id
LEFT OUTER JOIN sys.extended_properties ON (sys.extended_properties.minor_id = syscolumns.colid
AND sys.extended_properties.major_id = syscolumns.id)
LEFT OUTER JOIN syscomments ON syscolumns.cdefault = syscomments.id
WHERE syscolumns.id IN
(SELECT id
FROM sysobjects
WHERE upper(xtype) IN('U',
'V') )
AND (systypes.name <> 'sysname')
AND sysobjects.name=N'UnitTestdafa'
AND systypes.name<>'geometry'
AND systypes.name<>'geography'
ORDER BY syscolumns.colid
[Sql]:INSERT [UnitTestdafa] ([name],[Type])
SELECT N'漫画' AS [name],N'书本' AS [Type]
UNION ALL
SELECT N'间谍过家家' AS [name],N'漫画' AS [Type]
UNION ALL
SELECT N'红楼梦' AS [name],N'古籍' AS [Type]
;
select SCOPE_IDENTITY();
[Sql]:SELECT [name] AS [Name] , [Type] AS [Type] ,[i].[name] as app_ext_col_0 FROM [UnitTestdafa] [i] WHERE (( [Type] = @Type0 ) AND (NOT EXISTS ( SELECT * FROM [UnitTestdafa] [s] WHERE ( [name] = [i].[Type] ) )))
[Pars]:
[Name]:@Type0 [Value]:书本 [Type]:String
[Sql]:(SELECT *,0 as sugarIndex FROM [UnitTestdafa] [b] WHERE ( [Type] = '漫画' ))
[Pars]:
[Name]:@Type0 [Value]:书本 [Type]:String
0 回复 -
本号已停用 VIP0
1周前看起来是这里的问题
[Sql]:(SELECT *,0 as sugarIndex FROM [UnitTestdafa] [b] WHERE ( [Type] = '漫画' ))我这里的N'不见了
0 回复 -
fate sta VIP0
1周前SELECT *,0 as sugarIndex FROM [UnitTestdafa] [b] WHERE ( [Type] = '漫画' ) 这个能不能查出数据。如果能出来就和N没有关系
0 回复 -
fate sta VIP0
1周前在sqlserver能不能查出来
0 回复 -
本号已停用 VIP0
1周前@fate sta:应该就是这个n的问题
0 回复 -
本号已停用 VIP0
1周前我们客户的数据库是这样的我们只能操作表改不了数据库
0 回复 -
fate sta VIP0
1周前我处理一下
0 回复 -
本号已停用 VIP0
1周前@fate sta:感谢大佬
0 回复 -
fate sta VIP0
1周前SqlSugarCore 5.1.4.183-preview01
过五分钟后安装到预览版本 已修复
默认带N
如果不想要N可以通过文档:字符索引优化去掉
0 回复