首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >避免Linq选择方法中的重复代码

避免Linq选择方法中的重复代码
EN

Stack Overflow用户
提问于 2016-01-07 07:50:31
回答 1查看 757关注 0票数 2

我有一些愚蠢的情况,我找不到简单而优雅的解决方案来解决烦人的问题。

我使用简单的UI编写asp.net应用程序,用于基于用户选择的数据库查询。用于使用实体框架查询DB I。

在我的场景中,可选的用户选择之一是免费文本,为此我使用Server功能(使用康廷斯函数,因为我需要根据相关性排序结果)。

现在,我有以下情况:

如果用户没有提供免费的文本条件,我使用IQueriable<Result>类型的结果创建简单的IQueriable<Result>查询(其中“结果”是一个包含表中数据的实体)。

但是,如果用户确实提供了免费的文本条件,我使用CONTAINSTABLE创建查询,它的类型是IQueriable<ResultWithRank> (其中'ResultWithRank‘是一个包含两个实体的实体:’ResultWithRank‘和'Rank',因为CONTAINSTABLE会导致内部连接。

在这个阶段,在我构建了我的queriable之后,我需要在它上执行'Select‘方法,以便将它转换为有用的东西。

以下是问题所在:

在第一种情况下,select语句如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var result = queryable.Select(entity => /*.. about 20 lines of reshapying code .. */

在第二种情况下,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var result = queryable.Select(entity.Result => /*.. about 20 lines of exactly the same reshapying code .. */

我希望避免重复“选择”代码,因为这两种情况都是相同的。我试图将它移到外部方法,但这没有执行,因为Linq试图将我的方法转换为SQL,显然失败了。

如何在不复制“select”代码的情况下,以某种优雅的方式解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-01-07 07:56:52

我会用:

代码语言:javascript
代码运行次数:0
运行
复制
Expression<Func<Result, Foo>> conversion = result => { ... };

第一例:

代码语言:javascript
代码运行次数:0
运行
复制
var result = queryable.Select(conversion);

第二个案件:

代码语言:javascript
代码运行次数:0
运行
复制
var result = queryable.Select(entity => entity.Result)
                      .Select(conversion);

基本上,可以使用这样的事实:您可以一起执行两个投影,这样您的第一个投影(在第二个情况下)将使您进入一个您已经处理过的情况。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34649878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档