小编Lea*_*pez的帖子

使用GROUP BY和COUNT(DISTINCT)的LINQ to SQL

我必须执行以下SQL查询:

select answer_nbr, count(distinct user_nbr)
from tpoll_answer
where poll_nbr = 16
group by answer_nbr
Run Code Online (Sandbox Code Playgroud)

LINQ to SQL查询

from a in tpoll_answer 
where a.poll_nbr = 16 select a.answer_nbr, a.user_nbr distinct 
Run Code Online (Sandbox Code Playgroud)

映射到以下SQL查询:

select distinct answer_nbr, distinct user_nbr
from tpoll_answer
where poll_nbr = 16
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是在尝试GROUP结果时问题就出现了,因为我无法找到映射到我在这里写的第一个查询的LINQ to SQL查询(感谢LINQPad让这个过程变得更容易).以下是我发现的唯一一个给我预期结果的:

from answer in tpoll_answer where answer.poll_nbr = 16 _
group by a_id = answer.answer_nbr into votes = count(answer.user_nbr)
Run Code Online (Sandbox Code Playgroud)

这反过来会产生所有SQL查询中的丑陋和非优化:

SELECT [t1].[answer_nbr] AS [a_id], (
    SELECT COUNT(*)
    FROM (
        SELECT CONVERT(Bit,[t2].[user_nbr]) AS [value], [t2].[answer_nbr], [t2].[poll_nbr] …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

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

Type.GetMethods的BindingFlags,不包括属性访问器

假设我有以下程序:

namespace ReflectionTest
{
    public class Example
    {
        private string field;

        public void MethodOne() { }

        public void MethodTwo() { }

        public string Property
        {
            get { return field; }
            set { this.field = value; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            iterate(typeof(Example));

            Console.ReadLine();
        }

        public static void iterate(Type type)
        {
            MethodInfo[] methods = type.GetMethods(
                BindingFlags.DeclaredOnly |
                BindingFlags.Instance |
                BindingFlags.Public);

            foreach (MethodInfo mi in methods)
            {
                Console.WriteLine(mi.Name);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,我得到以下输出:

MethodOne
MethodTwo
get_Property
set_Property …

.net reflection

16
推荐指数
1
解决办法
4302
查看次数

使用SQL Server 2005中的ROW_NUMBER()OVER()在不同列上进行排序的分页查询

假设我正在使用Northwind数据库,并且我希望通过包含以下参数的存储过程运行查询:

  • @Offset 指示分页开始的位置,
  • @Limit 表示页面大小,
  • @SortColumn 表示用于分类目的的列,
  • @SortDirection,表示上升或后代排序.

我的想法是对数据库进行分页,因为结果集包含数千行,因此缓存不是一个选项(并且使用VIEWSTATE甚至不被视为IMO,很糟糕).

您可能知道SQL Server 2005提供了函数ROW_NUMBER,它返回结果集的分区中的行的序号,从1开始,每个分区的第一行.

我们需要对每个返回的列进行排序(本例中为5),动态SQL不是一个选项,因此我们有两种可能:使用大量的IF ... ELSE ...10个查询,这是一个难以维护的地狱,或者具有如下查询:

WITH PaginatedOrders AS (
    SELECT
        CASE (@SortColumn + ':' + @SortDirection)
            WHEN 'OrderID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.OrderID ASC)
            WHEN 'OrderID:D' THEN ROW_NUMBER() OVER (ORDER BY Orders.OrderID DESC)
            WHEN 'CustomerID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.CustomerID ASC)
            WHEN 'CustomerID:D' THEN ROW_NUMBER() OVER (ORDER BY Orders.CustomerID DESC)
            WHEN 'EmployeeID:A' THEN ROW_NUMBER() OVER (ORDER BY Orders.EmployeeID ASC)
            WHEN …
Run Code Online (Sandbox Code Playgroud)

pagination sql-server-2005

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

标签 统计

.net ×1

c# ×1

linq ×1

linq-to-sql ×1

pagination ×1

reflection ×1

sql-server-2005 ×1