小编Tim*_*ter的帖子

为什么LINQ JOIN比使用WHERE链接要快得多?

我最近升级到了VS 2010,正在玩LINQ to Dataset.我有一个强大的类型化的Authorization数据集,它位于ASP.NET WebApplication的HttpCache中.

所以我想知道实际上检查用户是否有权做某事的最快方法.如果有人感兴趣的话,是我的数据模型和其他一些信息.

我检查了3种方法:

  1. 直接数据库
  2. LINQ查询的Where条件为"Join" - 语法
  3. 带有Join的 LINQ查询- 语法

这些是每个函数1000次调用的结果:

1.Iteration:

  1. 4,2841519秒
  2. 115,7796925秒
  3. 2,024749秒

2.Iteration:

  1. 3,1954857秒
  2. 84,97047秒
  3. 1,5783397秒

3.Iteration:

  1. 2,7922143秒
  2. 97,8713267秒
  3. 1,8432163秒

平均:

  1. 数据库:3,4239506333秒.
  2. 其中:99,5404964秒.
  3. 加入:1,815435秒.

为什么Join-version比where-syntax快得多,这使得它无用尽管作为LINQ新手它似乎是最清晰的.或者我在查询中遗漏了什么?

这是LINQ查询,我跳过数据库:

地点:

Public Function hasAccessDS_Where(ByVal accessRule As String) As Boolean
    Dim userID As Guid = DirectCast(Membership.GetUser.ProviderUserKey, Guid)
    Dim query = From accRule In Authorization.dsAuth.aspnet_AccessRule, _
                roleAccRule In Authorization.dsAuth.aspnet_RoleAccessRule, _
                role In Authorization.dsAuth.aspnet_Roles, _
                userRole In Authorization.dsAuth.aspnet_UsersInRoles _
                Where accRule.idAccessRule = roleAccRule.fiAccessRule …
Run Code Online (Sandbox Code Playgroud)

.net linq performance join linq-to-dataset

96
推荐指数
3
解决办法
2万
查看次数

如何将DateTime格式化为24小时?

我需要从datetime的字符串以24小时格式显示时间.

..
var curr = DateTime.Now;
string s = ???;
Console.WriteLine(s);
..
Run Code Online (Sandbox Code Playgroud)

输出结果必须是:"16:38"谢谢.

c# format datetime

73
推荐指数
2
解决办法
14万
查看次数

Dictionary.Add vs Dictionary [key] = value的区别

Dictionary.Add方法和索引器之间有什么区别Dictionary[key] = value

.net c#

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

单步执行属性/功能(F11)无法按预期工作

在Visual Studio 2010中,Step Into Property/Function(F11)无法按预期工作.

它不会涉及财产制定者或吸气者.

我将解决方案从转换Visual Studio 20052010,我想要进入的函数是一个单独的类库中的属性.

我怎样才能让它像我期望的那样工作?

.net debugging visual-studio-2010

61
推荐指数
1
解决办法
3万
查看次数

将NULL传递给构造函数

我无法理解为什么使用参数执行构造函数Double[]

using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            D myD = new D(null);
            Console.ReadLine();           
        }

    }

    public class D
    {
        public D(object o)
        {
            Console.WriteLine("Object");
        }
        public D(double[] array)
        {
            Console.WriteLine("Array");
        }
        public D(int i)
        {
            Console.WriteLine("Int");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为因为第一个构造函数采用引用类型的参数.带引号参数的第一个构造函数因为null是引用类型的默认值.

但我不明白为什么不object,它也是一个参考类型.

c# constructor overloading constructor-overloading

60
推荐指数
2
解决办法
2007
查看次数

C#SQL Top作为参数

试图在我的sql语句中参数化TOP的值.

SELECT TOP @topparam * from table1

command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用.有人有什么建议吗?
只是为了澄清,我不想使用存储过程.

sql t-sql sql-server ado.net

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

为什么Enumerable.Cast会引发InvalidCastException?

如果我可以隐式地将整数值转换为double,例如:

int a = 4;    
double b = a;
// now b holds 4.0
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做:

int[] intNumbers = {10, 6, 1, 9};    
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)

我得到"指定的演员表无效" InvalidCastException例外.

相反(从double转换为int)会导致相同的错误.

我究竟做错了什么?

c# ienumerable casting

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

为什么这些linq输出不同?

第一个声明:

IEnumerable<char> query = "Not what you might expect";

query = query.Where (c => c != 'a');
query = query.Where (c => c != 'e');
query = query.Where (c => c != 'i');
query = query.Where (c => c != 'o');
query = query.Where (c => c != 'u');
Run Code Online (Sandbox Code Playgroud)

产量String.Join("", query):"Nt wht y mght xpct"

第二个声明:

query = "Not what you might expect";

foreach (char vowel in "aeiou")
    query = query.Where (c => c != vowel);
Run Code Online (Sandbox Code Playgroud)

产量 …

c# linq

35
推荐指数
3
解决办法
767
查看次数

为什么"ss"等同于德国锋利人物'ß'?

从未来的这个问题,我不知道为什么äae是不同的(这是有道理的),但ßss视为相等.即使这个问题似乎是相关的,我也没有找到答案,甚至提到"这ß将与SS德国或类似的相提并论",但不是为什么.

我发现MSDN上唯一的资源是:如何:比较字符串

这里提到以下但也缺乏原因:

// "They dance in the street." 
// Linguistically (in Windows), "ss" is equal to 
// the German essetz: 'ß' character in both en-US and de-DE cultures. 
.....
Run Code Online (Sandbox Code Playgroud)

那么,为什么要truede-DE文化或任何其他文化进行评估:

var ci = new CultureInfo("de-DE");
int result = ci.CompareInfo.Compare("strasse", "straße", CompareOptions.IgnoreNonSpace); // 0
bool equals = String.Equals("strasse", "straße", StringComparison.CurrentCulture); // true
equals = String.Equals("strasse", …
Run Code Online (Sandbox Code Playgroud)

.net c# windows string string-comparison

34
推荐指数
1
解决办法
7011
查看次数

如何结合GROUP BY和ROW_NUMBER?

我希望以下示例代码不言自明:

declare @t1 table (ID int,Price money, Name varchar(10))
declare @t2 table (ID int,Orders int,  Name varchar(10))
declare @relation  table (t1ID int,t2ID int)
insert into @t1 values(1, 200, 'AAA');
insert into @t1 values(2, 150, 'BBB');
insert into @t1 values(3, 100, 'CCC');
insert into @t2 values(1,25,'aaa');
insert into @t2 values(2,35,'bbb');
insert into @relation values(1,1);
insert into @relation values(2,1);
insert into @relation values(3,2);

select T2.ID AS T2ID
,T2.Name as T2Name
,T2.Orders
,T1.ID AS T1ID
,T1.Name As T1Name
,T1Sum.Price
FROM @t2 T2
INNER …
Run Code Online (Sandbox Code Playgroud)

sql t-sql group-by sql-server-2005

31
推荐指数
1
解决办法
11万
查看次数