相关疑难解决方法(0)

组合两个表达式(Expression <Func <T,bool >>)

我有两个类型的表达式,Expression<Func<T, bool>>我想采取OR,AND或NOT这些并得到一个相同类型的新表达式

Expression<Func<T, bool>> expr1;
Expression<Func<T, bool>> expr2;

...

//how to do this (the code below will obviously not work)
Expression<Func<T, bool>> andExpression = expr AND expr2
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression

232
推荐指数
5
解决办法
9万
查看次数

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

sql查询中的最大参数数

有一段时间我会尝试使用LINQ.枚举集合并在我的代码中更改其某些属性的典型方法如下所示:

ATDataContext dc = new ATDataContext(Settings.connection_string);

int[] col = ListViewClass.getListViewSelectedPositionTags(listView);

try
{
    foreach (var item in col)
    {
        var ctx = (from r in dc.MailingLists
                   where r.ID == item
                   select r).Single();

        ctx.Excluded = 'Y';
        ctx.ExcludedComments = reason;
    }

    dc.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)

有一段时间有一个建议来做到这一点...似乎更聪明的方式:

var ctx = from r in dc.MailingLists
    where col.Contains(r.ID)
    select r;

foreach (var item in ctx)
{
    item.Excluded = 'Y';
    item.ExcludedComments = reason;
}

dc.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

Iit在很多层面上都很有意义,我喜欢这个解决方案.它比第一个更聪明,更快捷.

我已经在生产环境中使用了这个解决方案一段时间了.

几周后,我在搜索应用程序日志文件时看到了什么,并看到了这一点:

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

LINQ to SQL转换where col.Contains(r.ID)IN子句看起来像:
WHERE ID …

c# linq-to-sql

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

在LINQ to SQL中避免2100参数限制

在我正在进行的项目中,我需要以下列方式访问LINQ中的2个数据库:

  1. 我得到了DB1指定日期范围之间所有旅行号码的列表,并将其存储为"长"值列表

  2. 我在DB2上执行了大量连接的大量查询,但只查看了上面列表中包含其行程编号的行程.

问题是,来自DB1的行程列表经常返回超过2100项 - 我当然在SQL中达到2100参数限制,这导致我的第二个查询失败.我一直在寻找解决这个问题的方法,例如此处所描述的,但是这实际上将我的查询更改为LINQ-to-Objects,这会导致我的连接出现很多问题

我还能做其他解决方法吗?

.net c# linq linq-to-sql

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

实体框架达到2100参数限制

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

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

sql linq parameters entity-framework expression-trees

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

如何将超过10000个参数添加到单个sql命令

我想在单个sql命令中添加10000多个参数.怎么可能?据我所知2100参数单个sql命令.

c#

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

SQL Server"in"等效于.Net

我有兴趣学习:

Select * from Customer where CustomerId in(12,23,45);
Run Code Online (Sandbox Code Playgroud)

同样,上面有相同的C#.Net关键字吗?

示例:验证日期(月)不在十月,十一月十二月(不在SQL或LINQ中)

我用扩展方法(三元运算符||通过用月验证)做到了我正在寻找简单的方法来验证,如果存在的话.

c#

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