我需要按照在类中声明它们的顺序使用反射来获取所有属性.根据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) 我见过很多关于VB.NET或C#.NET的示例/教程,其中作者使用a FileStream
来编写/读取文件.我的问题是这个方法有什么好处而不是使用System.IO.File.Read/Write
?为什么大多数例子只使用FileStream
一行代码才能实现?
我正在使用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) 我使用此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
属性?
比方说,我们有一个包含随机值的成员的枚举
enum MyEnum
{
enumMember1 = 100,
enumMember2 = 10,
enumMember3 = 50
}
Run Code Online (Sandbox Code Playgroud)
我们无法按照定义的顺序遍历枚举成员!Enum.GetValues
并Enum.GetNames
在内部对成员进行排序并给出结果!
迭代Enum.GetNames或Enum.GetValues返回的数组.ToString()
并对每个数组元素执行a 给出,
enumMember2, enumMember3, enumMember100.
Run Code Online (Sandbox Code Playgroud)
只是想知道是否有任何开箱即用的方法来获得enum成员按照他们创建的顺序?搜索,没有得到太多信息!谢谢!
PS我不想通过自定义属性完成这项工作!在起草它时,我怀疑如果在对Enum成员进行排序之后产生了枚举的IL,那就去检查它吧!
我有一个表 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。
我想我的查询无法翻译,但是还有其他方法吗?
提前致谢!
我一直在检查互联网,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文件中正确处理. …
我正在计算一份报告的招聘设备收入.其中,与正常天数相比,周末天的招聘成本将增加10%.那么如何计算两个日期之间的周末天数.而在报表查询中,我也不能使用DECLARE.有人可以帮助我做到这一点.非常感谢
我有一个存储过程,我使用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, Action
1 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 …
我有以下查询
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
需要一个)?
c# ×6
sql ×4
.net ×3
linq ×2
linq-to-sql ×2
asp.net ×1
clr ×1
datetime ×1
enumeration ×1
enums ×1
indexing ×1
properties ×1
reflection ×1
timeout ×1
vb.net ×1