相关疑难解决方法(0)

使用Contains()时达到2100参数限制(SQL Server)

from f in CUSTOMERS
where depts.Contains(f.DEPT_ID)
select f.NAME
Run Code Online (Sandbox Code Playgroud)

deptsIEnumerable<int>部门ID 的列表()

这个查询工作正常,直到你传递一个大的列表(比如大约3000 dept ids)..然后我得到这个错误:

传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确.此RPC请求中提供的参数太多.最高为2100.

我将查询更改为:

var dept_ids = string.Join(" ", depts.ToStringArray());
from f in CUSTOMERS
where dept_ids.IndexOf(Convert.ToString(f.DEPT_id)) != -1
select f.NAME
Run Code Online (Sandbox Code Playgroud)

使用IndexOf()修复错误但使查询变慢.有没有其他方法可以解决这个问题?非常感谢.

linq sql-server parameters limit

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

LINQ表达式返回属性值?

我正在尝试创建一个通用函数来帮助我从本地列表中使用LINQ to SQL选择数千条记录.SQL Server(至少2005)将查询限制为2100个参数,我想选择更多的记录.

这将是一个很好的示例用法:

var some_product_numbers = new int[] { 1,2,3 ... 9999 };

Products.SelectByParameterList(some_product_numbers, p => p.ProductNumber);
Run Code Online (Sandbox Code Playgroud)

这是我的(非工作)实现:

public static IEnumerable<T> SelectByParameterList<T, PropertyType>(Table<T> items, 

IEnumerable<PropertyType> parameterList, Expression<Func<T, PropertyType>> property) where T : class
{
    var groups = parameterList
        .Select((Parameter, index) =>
            new
            {
                GroupID = index / 2000, //2000 parameters per request
                Parameter
            }
        )
        .GroupBy(x => x.GroupID)
        .AsEnumerable();

    var results = groups
    .Select(g => new { Group = g, Parameters = g.Select(x => x.Parameter) } )
    .SelectMany(g …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression linq-to-sql

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

标签 统计

linq ×2

c# ×1

expression ×1

lambda ×1

limit ×1

linq-to-sql ×1

parameters ×1

sql-server ×1