首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >重用lambda表达式

重用lambda表达式
EN

Stack Overflow用户
提问于 2014-06-06 10:12:00
回答 1查看 2.2K关注 0票数 1

今天,我有一个重复的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class MyProjectionExpressions
 {
    public static Expression<Func<Log, dynamic>> LogSelector()
    {
        return log => new
        {
            logId = log.LogId,
            message = log.Message,
        };
    }

    public static dynamic LogSelector(Log log)
    {
        return new
        {
            logId = log.LogId,
            message = log.Message,
        };
    }
 }

第一个方法是一个可重用的投影表达式,我如下所用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    db.Logs.Select(MyProjectionExpressions.LogSelector());

第二个方法是在我不处理集合时使用的,但只需要序列化一个项,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    MyProjectionExpressions.LogSelector(someLog);

我试过重用代码,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class MyProjectionExpressions
 {
    public static Expression<Func<Log, dynamic>> LogSelector()
    {
        return log => MyProjectionExpressions.LogSelector(log);
    }

    public static dynamic LogSelector(Log log)
    {
        return new
        {
            logId = log.LogId,
            message = log.Message,
        };
    }
 }

但是,我遇到了“Linq to Entities vs Linq to Object”的问题,即:我必须像这样重用我的投影表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    db.Logs.ToList().Select(MyProjectionExpressions.LogSelector());

因为MyProjectionExpressions.LogSelector()现在包含(使用)一个Linq到实体无法识别的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    LINQ to Entities does not recognize the method 'MyProjectionExpressions.LogSelector()'

的问题是,最后:

如何以Linq到实体继续工作的方式重用lamba表达式?

这个lambda表达式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        log => new
        {
            logId = log.LogId,
            message = log.Message,
        };
EN

回答 1

Stack Overflow用户

发布于 2014-06-06 10:15:20

与其按编译方法实现表达式,不如按表达式实现已编译的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MyProjectionExpressions
{
    public static Expression<Func<Log, dynamic>> LogSelector()
    {
        return log => new
        {
            logId = log.LogId,
            message = log.Message,
        };
    }
    private static Lazy<Func<Log, dynamic>> func;
    static MyProjectionExpressions()
    {
        func = new Lazy<Func<Log, dynamic>>(() => LogSelector().Compile());
    }
    public static dynamic LogSelector(Log log)
    {
        return func.Value(log);
    }
}

请注意,为了避免每次需要使用表达式时总是重复使用表达式,您可以缓存编译后的表达式并重用它。

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

https://stackoverflow.com/questions/24088203

复制
相关文章
Nim编码风格
介绍 Nim语言不限制开发人员使用哪种具体的编码风格, 但为了社区的发展,在编写一些标准库的时候还是应该遵从统一的编码风格 这篇文章会列出一系列的编码风格准则,供大家参考。 但值得注意的是,有很多例外场景会与这些准则相悖, 而且,nim语言非常灵活,在一些特定上下文中,这些编码风格准则也不适用。 跟python相似,python的编码风格在不断演化、改变, nim语言也是这样,随着时间的推移,这个编码风格准则也会改变。 在编写nim的基础类库、编译器、官方工具的时候, 强制要求遵从这些编码风格准则 间距和空
liulun
2018/01/12
1K0
【编码规范】HTML编码风格指南
HTML 作为描述网页结构的超文本标记语言,在百度一直有着广泛的应用。本文档的目标是使 HTML 代码风格保持一致,容易被理解和被维护。
一尾流莺
2022/12/10
3.2K0
【编码规范】Less 编码风格指南
@import 语句引用的文件必须(MUST)写在一对引号内,.less 后缀不得(MUST NOT)省略(与引入 CSS 文件时的路径格式一致)。引号使用 ' 和 " 均可,但在同一项目内必须(MUST)统一。
一尾流莺
2022/12/10
9390
【编码规范】Typescript 编码风格指南
提示信息被划分类成了一般的区间。如果要新加一个提示信息,在上条代码上加1做为新的代码。
一尾流莺
2022/12/10
1.3K0
【编码规范】CSS编码风格指南
CSS 作为网页样式的描述语言,在百度一直有着广泛的应用。本文档的目标是使 CSS 代码风格保持一致,容易被理解和被维护。
一尾流莺
2022/12/10
1K0
JavaScript 标准风格指南
JavaScript 中的关键字有 var, const, let, if, else, case, break, while, for, function, return 等。
前端GoGoGo
2018/08/24
3040
Linux 内核编码风格
像其他大型软件一样,Linux制订了一套编码风格,对代码的格式、风格和布局做出了规定。我写这篇的目的也就是希望大家能够从中借鉴,有利于大家提高编程效率。
用户7678152
2020/08/26
2.7K0
Linux 编码风格总结
Linux有独特的编码风格,在内核源代码下存在一个文件Documentation/CodingStyle,进行了比较详细的描述。
Jasonangel
2021/07/07
1.3K0
FlutterUnit 更新 | 拓展样式风格切换 - 标准风格
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第 5 天,点击查看活动详情
张风捷特烈
2022/10/31
1.1K0
FlutterUnit 更新 | 拓展样式风格切换 - 标准风格
Python 编码风格指南
在编程的世界里,编码风格是一种重要的规范,它不仅可以提高代码的可读性和可维护性,还能够促进团队合作。对于 Python 这门语言而言,PEP 8(Python Enhancement Proposal 8)就是一份权威的编码风格指南。本篇博客将详细介绍 PEP 8 的定义、作用以及为什么它是必要的。
疯狂的KK
2023/08/04
2840
Python 编码风格指南
【编码修炼】ScalaTest的测试风格
ScalaTest几乎已经成为Scala语言默认的测试框架,而在JVM平台下,无论是否使用Scala进行开发,我认为仍有尝试ScalaTest的必要。这主要源于它提供了多种表达力超强的测试风格,能够满足各种层次的需求包括单元测试、BDD、验收测试、数据驱动测试。正如ScalaTest的创建者Bill Venners所说: A guiding design principle of ScalaTest is that different people on a team should be able look
张逸
2018/03/07
1.7K0
Go 编码建议——风格篇
为形成统一的 Go 编码风格,提高代码的可读性、安全性和易维护性,在 Google Golang 代码规范 的基础上,给出编码风格建议。使用时,可根据实际情况进行了调整和补充。
恋喵大鲤鱼
2022/01/10
1.1K0
Go 编码建议——风格篇
视频自动审核工具有哪些 自动审核工具有什么优势
现在很多人都通过上传视频来为自己无聊的生活增添一些乐趣。所以平台在视频审核方面需要投入更多的精力,如果只靠人力进行审核的话是很困难的,每天都有成千上万的视频需要去审核。单单依靠人力,没有办法实现所有的视频都被审核,而且还会浪费很多时间,所以更好的办法就是使用视频自动审核工具。
用户8715145
2022/03/18
2.5K0
如何写出更具有Python风格的代码
我们都喜欢 Python,因为它让编程和理解变的更为简单。但是一不小心,我们就会忽略规则,以非 Pythonic 方式编写一堆垃圾代码,从而浪费 Python 这个出色的语言赋予我们的优雅。Python 的代码风格是非常优雅、明确和简单,在 Python 解释器中执行 import this 你可以看到 Tim Peters 编写的 Python 之禅:
somenzz
2020/11/25
5770
如何写出更具有Python风格的代码
C++ 编码风格建议
尽量不要使用非 ASCII 字符,万不得已时才使用。源码文件请使用 UTF8 编码。现如今字符编码种类繁多,每一个国家和地区的本土化字符编码各不相同,为使代码在不同环境下能够正常显示,建议使用统一的 UTF8 编码。
恋喵大鲤鱼
2022/12/02
7440
全局数据治理 - 具有竞争优势的框架
公众号后台回复: 报告 获取源文件 欢迎添加本站微信:datajh (可上下滑动或点单个图片放大左右滑动查看)
数据D江湖
2022/12/08
4720
全局数据治理 - 具有竞争优势的框架
ABB PP846A 具有持续的竞争优势
增强型精益是一个以人为中心的工业运营管理框架。欢迎来到赤裸裸的人类认知增强时代,这个时代需要更少的特殊技术技能或复杂的小工具。当然,还需要其他技能,包括与机器和传感器交互的能力。
用户10539449
2023/05/08
1430
ABB PP846A 具有持续的竞争优势
新编码标准的部署计划
本视频来自Jan Ozer在streaming learning center的课程,介绍了多种新的编码标准的部署计划。
用户1324186
2021/02/12
4080
新编码标准的部署计划
[数据库基础]——编码标准之结构
数据库是由若干表构成,表是由数据行构成,数据行由若干列组成。由于数据库这样的结构,这就要求我们在构成数据库表时,需要注意一些问题。现在提出一些注意的问题。 1. 主键 每一个表必须有一个主键列。大多数情况,存在一个命名为ID的列作为主键列 直接创建 1: CREATE TABLE Products 2: { 3: [ID] int NOT NULL PRIMARY KEY, 4: [Name] varchar(255) NOT NULL 5: } 添加主键约束
数据分析
2018/03/01
8560
[数据库基础]——编码标准之格式
代码就像家里的各种物品,格式化就好比对家中物品的排放。家中的物品随便怎么放,物品都不会反对,房子也不会介意,但是物品的排放合理、规整,会让家里变得更具有美感。代码也是一样,代码写成什么样子,代码不会反对,计算机也不会介意(除非不能运行),但是毕竟还是会有人来欣赏、维护这些代码,这时候具有很好格式的代码就显得尤为重要了。 SQL关键字 所有的SQL关键字大写。 SELECT,UPDATE,DELETE,INSERT INTO,CRETAE DATABASE,ALTER DATABASE,CREATE TABL
数据分析
2018/03/01
1.5K0

相似问题

Android的编码风格标准

51

编码风格:如何改进公司的编码风格和标准

74

这种编码风格有什么优势吗?

50

编码风格:函数和过程编码标准

25

通过通配符导入单个类的编码风格优势(star)

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文