相关疑难解决方法(0)

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万
查看次数

将一个大的IEnumerable划分为一个固定数量的项目的较小IEnumerable

为了支持仅接受特定数量的项目(5项)的API,我想将LINQ结果转换为总是包含该设定数量项目的较小项目组.

假设清单 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18}

我想得到三个较小的列表,每个最多包含5个项目

{1, 2, 3, 4, 5}

{6, 7, 8, 9, 10}

{11, 12, 13, 14, 15}

{16, 17, 18}

我怎么能用LINQ做到这一点?我假设它涉及Group或者Aggregate,但我无法弄清楚如何写它.

c# linq

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

实体框架达到2100参数限制

我正在将一些代码从LINQ-to-SQL迁移到Entity Framework.以前,当对从SQL Server(描述一个2100参数限制跑到这里),我用由Marc Gravell提供的解决方案在这里.正如他自己的回复中所述,它不适用于实体框架.

我对表达式完全没有经验,知道从哪里开始,但我正在寻找的本质上是相同的扩展方法,但适用于实体框架.提前感谢您提供的任何帮助.

sql linq parameters entity-framework expression-trees

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

解决“Where Contains”中的 LINQ to SQL 2100 最大参数约束

问题:我在 SQL Server 数据库上使用 SQLMetal 生成了一个 DataContext。数据库有 TableA,其中包含具有 Int64 标识符的实体。我的查询需要处理查询某个集合中具有 ID 的所有元素的情况。随着数据集的增长,该集偶尔包含超过 2100 个 ID。

我意识到这个问题与有关该主题的其他问题类似,但我正在寻求帮助构建扩展方法来解决该问题。

相关问题:
避免 LINQ to SQL 中的 2100 个参数限制
使用 Contains() 时达到 2100 个参数限制 (SQL Server)

我的代码看起来像这样:

var ids = new List<long>{ 1, 2, 3, /*...,*/ 2101};
var database = new MyDatabaseClass(connection)
var items = database
 .TableA
 .Where(x=>ids.Contains(x.RecordID))
 .ToList();
Run Code Online (Sandbox Code Playgroud)

并产生此错误:

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

随着各种数据集的增长,我预计会经常遇到这个问题,并且我想创建一个可用于任何表的通用扩展。其想法是将查询分解为更小的Where Contains 查询,然后聚合结果。这是我试图展示我的想法的尝试之一:

public static List<TSource> WhereMemberInUniverse<TSource, TUniverse>(this IQueryable<TSource> source, Func<TSource, TUniverse> memberSelector, IEnumerable<TUniverse> universe)
{
    var …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server linq-to-sql

4
推荐指数
1
解决办法
8126
查看次数