加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何重构多个类似的Linq-To-Sql查询?

发布时间:2020-12-16 01:30:41 所属栏目:百科 来源:网络整理
导读:在downvoting或closing之前读取:这个几乎完全相同的 previous question of mine存在,其唯一目的是将上一个问题重新改写为Linq-To-Sql范围.上一个问题中包含的所有答案对Linq作用域有效,但在Linq-To-SQL作用域中无效. 假设我想要重构以下两个Linq-To-SQL查询
在downvoting或closing之前读取:这个几乎完全相同的 previous question of mine存在,其唯一目的是将上一个问题重新改写为Linq-To-Sql范围.上一个问题中包含的所有答案对Linq作用域有效,但在Linq-To-SQL作用域中无效.

假设我想要重构以下两个Linq-To-SQL查询:

var someValue1 = 0;
var someValue2= 0;
var query1 = db.TableAs.Where( a => a.TableBs.Count() > someValue1 )
              .Take( 10 );
var query2 = db.TableAs.Where( a => a.TableBs.First().item1 == someValue2)
              .Take( 10 );

请注意,只有Where参数更改.有什么方法可以将查询放在方法中并将Where参数作为参数传递?

当我尝试枚举结果时,previous question中发布的所有解决方案都已在运行时尝试失败.

引发的异常是:“用于查询运算符的不支持的重载’Where’”

解决方法

绝对.你写的:

public IQueryable<A> First10(Expression<Func<A,bool>> predicate)
{
    return db.TableAs.Where(predicate).Take(10);
}

(假设TableA是IQueryable< A&gt ;.) 称之为:

var someValue1 = 0;
var someValue2= 0;
var query1 = First10(a => a.TableBs.Count() > someValue1);
var query2 = First10(a => a.TableBs.First().item1 == someValue2);

我相信这会奏效……

这与前一个问题的答案之间的差异基本上是这个方法采用Expression< Func< T,bool>>而不仅仅是Func< T,bool>所以它最终使用Queryable.Where而不是Enumerable.Where.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读