小编Mag*_*nus的帖子

使用反射按声明顺序获取属性

我需要按照在类中声明它们的顺序使用反射来获取所有属性.根据MSDN,使用时无法保证订单GetProperties()

GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序.

但我已经读过,通过订购属性有一个解决方法MetadataToken.所以我的问题是,这样安全吗?我似乎无法在MSDN上找到有关它的任何信息.或者有没有其他方法来解决这个问题?

我目前的实施情况如下:

var props = typeof(T)
   .GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
   .OrderBy(x => x.MetadataToken);
Run Code Online (Sandbox Code Playgroud)

c# reflection properties getproperties

73
推荐指数
5
解决办法
3万
查看次数

写入文件时,FileStream与System.IO.File.WriteAllText相同

我见过很多关于VB.NET或C#.NET的示例/教程,其中作者使用a FileStream来编写/读取文件.我的问题是这个方法有什么好处而不是使用System.IO.File.Read/Write?为什么大多数例子只使用FileStream一行代码才能实现?

.net c# vb.net

18
推荐指数
1
解决办法
2万
查看次数

LINQ to SQL不会生成sargable查询

我正在使用LINQ To Sql(非实体框架),System.Data.Linq.DataContext库,访问SQL Server 2005数据库并使用.Net Framework 4.

表dbo.Dogs有一个CHAR(1)NULL类型的"Active"列.如果我直接写SQL,查询将是:

SELECT * FROM dbo.Dogs where Active = 'A';
Run Code Online (Sandbox Code Playgroud)

LINQ查询是这样的:

from d in myDataContext.Dogs where d.Active == 'A' select d;
Run Code Online (Sandbox Code Playgroud)

从上面的LINQ查询生成的SQL将Active字段转换为UNICODE.这意味着我无法在dbo.Dogs.Active列上使用索引,从而显着减慢查询速度:

SELECT [t0].Name, [t0].Active
FROM [dbo].[Dog] AS [t0]
WHERE UNICODE([t0].[Active]) = @p1
Run Code Online (Sandbox Code Playgroud)

有什么办法可以阻止Linq到Sql插入那个UNICODE()调用(从而失去了我对dogs.Active索引的好处)吗?我尝试使用EntityFunctions.AsNonUnicode()方法包装参数,但这没有用(它在生成的sql中将一个CONVERT()插入NVARCHAR而不是UNICODE()),例如:

...where d.Active.ToString() == EntityFunctions.AsNonUnicode('A'.ToString());
Run Code Online (Sandbox Code Playgroud)

.net c# linq-to-sql

13
推荐指数
1
解决办法
984
查看次数

SQL用户定义的值的聚合顺序是否保留?

我使用此MSDN页面中的代码创建用户定义的聚合以group by's在SQL Server中连接字符串.我的一个要求是连接值的顺序与查询中的顺序相同.例如:

Value   Group
1       1
2       1
3       2
4       2
Run Code Online (Sandbox Code Playgroud)

使用查询

SELECT
  dbo.Concat(tbl.Value) As Concat,
  tbl.Group
FROM
  (SELECT TOP 1000
     tblTest.*
  FROM 
    tblTest
  ORDER BY 
    tblTest.Value) As tbl
GROUP BY
  tbl.Group
Run Code Online (Sandbox Code Playgroud)

会导致:

Concat  Group
"1,2"   1
"3,4"   2
Run Code Online (Sandbox Code Playgroud)

结果似乎总是正确和正如预期的那样,但是我遇到的这个页面表明订单不能保证,并且该属性SqlUserDefinedAggregateAttribute.IsInvariantToOrder仅保留供将来使用.

所以我的问题是:假设字符串中的连接值可以以任何顺序结束是否正确?
如果是这种情况,为什么MSDN页面上的示例代码使用该IsInvariantToOrder属性?

c# sql clr user-defined-aggregate sql-server-2008

12
推荐指数
1
解决办法
1465
查看次数

无法按照定义的顺序检索枚举成员!

比方说,我们有一个包含随机值的成员的枚举

enum MyEnum
{
    enumMember1 = 100,
    enumMember2 = 10,
    enumMember3 = 50
}
Run Code Online (Sandbox Code Playgroud)

我们无法按照定义的顺序遍历枚举成员!Enum.GetValuesEnum.GetNames在内部对成员进行排序并给出结果!

迭代Enum.GetNames或Enum.GetValues返回的数组.ToString()并对每个数组元素执行a 给出,

enumMember2, enumMember3, enumMember100. 
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有任何开箱即用的方法来获得enum成员按照他们创建的顺序?搜索,没有得到太多信息!谢谢!

PS我不想通过自定义属性完成这项工作!在起草它时,我怀疑如果在对Enum成员进行排序之后产生了枚举的IL,那就去检查它吧!

.net enums enumeration

9
推荐指数
1
解决办法
667
查看次数

Entity Framework Core 具有多个值的 where 子句

我有一个表 Person,字段很少。我想在一次通话中从数据库中找到多个人,而不需要使用大量的“OR”。当我尝试以下查询时,我收到此错误。

var list = new List<string>(){"John", "Adam", "Bill", "David"};
context.People.Where(p=>list.Any(l=>l == p.Name)).ToList();
Run Code Online (Sandbox Code Playgroud)

错误信息:

System.InvalidOperationException:“无法翻译 LINQ 表达式 'DbSet .Where(p => __list_0 .Any(l => l == p.Name))”。以可翻译的形式重写查询,或者通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用来显式切换到客户端计算。有关详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101038

我想我的查询无法翻译,但是还有其他方法吗?

提前致谢!

c# linq entity-framework-core

8
推荐指数
1
解决办法
8924
查看次数

如何在c#中将查询字符串输入ashx文件

我一直在检查互联网,stackoverflow有一个答案,但它是在vb.net,我使用的是c#,

k,这是交易,我有一个存储在sql server db中的二进制映像.我有这个工作很好,加载它,也是为了解决它.在gridview中,我有一个主/详细页面详细信息的链接.我在html部分使用一个简单的html图像标签,这里是代码:

我正在使用VS2010和C#

(displayDetail02.aspx)

<body>
<form id="form1" runat="server">
<div>
  <img id="Img1" width="500" 
               runat="server" 
               src="~/getLargeImage.ashx?Businessid=<%Eval(businessid)%>"
               alt="Business Image" 
               style="border: 1px inset"/>
</div>
</form>
</body>
Run Code Online (Sandbox Code Playgroud)

这是后面的代码:

public partial class displayDetail02 : System.Web.UI.Page
{
   public string businessid = string.Empty;

   protected void Page_Load(object sender, EventArgs e)
   {
      if (!Page.IsPostBack)
      {
        businessid = Request.QueryString["businessid"];
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

(getLargeImage.ashx)

 public partial class getLargeImage : IHttpHandler {


 public void ProcessRequest(HttpContext context)
 {
    HttpContext _context = HttpContext.Current;
    context.Response.ContentType = "image/jpg";
    string businessid = Convert.ToString(context.Request.QueryString["businessid"]);    

  ...
Run Code Online (Sandbox Code Playgroud)

我的问题是查询字符串变量,我已经尝试了许多不同的方法来格式化来自displayDetail02.aspx的查询字符串,但我无法找到'和'右边显示参数,我不断得到'<%'是查询字符串的第一部分.

我在mozilla中的firebug中查看它,并且查询字符串正确传递,但它没有在ashx文件中正确处理. …

c# asp.net

7
推荐指数
2
解决办法
1万
查看次数

我可以计算SQL Server中两个日期之间的周末天数吗?

我正在计算一份报告的招聘设备收入.其中,与正常天数相比,周末天的招聘成本将增加10%.那么如何计算两个日期之间的周末天数.而在报表查询中,我也不能使用DECLARE.有人可以帮助我做到这一点.非常感谢

sql datetime sql-server-2008

7
推荐指数
1
解决办法
7023
查看次数

Linq存储过程超时但SSMS快速

我有一个存储过程,我使用LinqToSQL调用.我根本没做什么特别的事,比如说

MyDataContext db = new MyDataContext()

var results = db.storedProcedure(param1, param2, param3)

// Do stuff
Run Code Online (Sandbox Code Playgroud)

当我使用完全相同的参数运行存储过程时,我得到2到6秒之间的结果.该数据库是一个远程数据库.

但是,当我运行存储过程时(经过调试......)275秒!在正常情况下,这会产生以下异常:

[Win32Exception(0x80004005):等待操作超时]

[SqlException(0x80131904):超时已过期.操作完成之前经过的超时时间或服务器没有响应.] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action 1 wrapCloseInAction) +1753346 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction)+5295154 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning( TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)+242 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)+1682 System.Data.SqlClient.SqlDataReader.TryConsumeMetaData ()+59 System.Data.SqlClient.SqlDataReader.get_MetaData()+90 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+365 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior ,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task&task,Boolean asyncWrite)+1325 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,TaskCompletionSource`1 completion,Int32 timeout,Task&task,Boolean asyncWrite)+175 System.Data.SqlClient.SqlCommand .RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method)+53 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)+134 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)+41 System.Data.Common.DbCommand.ExecuteReader()+12 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query,QueryInfo queryInfo,IObjectReaderFactory …

sql linq timeout linq-to-sql

7
推荐指数
1
解决办法
2043
查看次数

优化查询,因此它不需要排名前N的排序

我有以下查询

select top 25
    tblSystem.systemName,
    tblCompany.name
from 
    tblSystem
    join tblCompany
        on tblSystem.fkCompanyID = tblCompany.pkCompanyID
order by
    tblSystem.systemName, 
    tblCompany.name
Run Code Online (Sandbox Code Playgroud)

这会在图片中生成第一个执行计划,第二个是没有的相同查询 order by

在此输入图像描述
有没有办法可以 通过以特定方式索引表来摆脱TOP N Sort(所以只TOP需要一个)?

sql indexing sql-server-2008

7
推荐指数
1
解决办法
4991
查看次数