[Linq] Linq如何调用外部方法?
Linq如何调用外部方法?
通常我们会有这样的需求,以前写SQL会直接在自定义函数,在EF非FECORE中处理比较麻烦。那么LINQ 能否在返回匿名实体的时直接调用外部方法呢?编译通过,运行时报错!
思考为何不行呢?假设方法a()
var xxxs= from…;
select new {
b=a();
}
其本质应该还是返回IQueryable或IEnumerable接口。编译输出xxxs.tolist()
发现是空值
思路一:匿名类型无法实现构造新列并赋值,那是否可以新建一个强类型实体并预算计算列。
遍历赋值;
foreach (var item in fAContractNews){item.IsAttachment = IsAttachment(item.ID);item.IsContact = IsContact(item.ID);item.BudgetNoList = GetBudgetNoList(item.ID);}
/// <summary>/// 是否关联/// </summary>/// <param name="ID"></param>/// <returns></returns>private string IsContact(Guid ID){var detail = context.FAContractDetail.Where(t => t.FACID == ID);var i = detail.ToList().Count;return i > 0 ? "已录入[" + i.ToString() + "]台设备" : "未录入设备";//return "未关联任何设备";}private string GetBudgetNoList(Guid ID){string[] budgetNos = context.FAContractDetail.Where(t => t.FACID == ID).Select(a => a.BudgetNo).Distinct().ToArray(); //获取员工编号数组 string str = string.Join(",", budgetNos);return str;}/// <summary>/// 是否有附件/// </summary>/// <param name="ID"></param>/// <returns></returns>private string IsAttachment(Guid ID){return context.MesAttachment.Any(t => t.FileId == ID) == true ? "有" : "无"; ;}
输出仍然是空值,问题出自哪里?
还是之前同样的问题返回的结果,并不会被修改。
所以构建一个list对象存储之后,再遍历;
思路二 不构建强类型实体,tolist().select()处理呢?
既然是转成tolist()之后可以,那是否可以tolist之后.select 时调用呢?
LINQ
(from pt in db.oaProjectTaskswhere pt.ProjectID == ProjectIDjoin t in db.oaTasks on pt.TaskID equals t.TaskIDwhere t.ParentTaskID == nulllet daypassed = GetDaysPassed(t.StartDate,t.Duration)select new ChartTask{TaskNumber = t.TaskNumber,StartDate = t.StartDate,DurationRemaining = t.Duration - daypassed,TaskDescription = t.Task, DaysPassed = daypassed,Duration = t.Duration }).ToList();
自定义方法
private int GetDaysPassed(DateTime StartDate, int Duration) {int retVal;if ((DateTime.Now - StartDate).Days > 0){if ((DateTime.Now - StartDate.AddDays(Duration)).Days > 0){retVal = Duration;}else{retVal = (DateTime.Now - StartDate).Days;}}else {retVal = 0;}return retVal;}
TOLIS()后Select() Goesto 返回
(from pt in db.oaProjectTaskswhere pt.ProjectID == ProjectIDjoin t in db.oaTasks on pt.TaskID equals t.TaskIDwhere t.ParentTaskID == nullselect t).ToList() // T-SQL query will be executed here and result will be returned.Select(t => new ChartTask {TaskNumber = t.TaskNumber,StartDate = t.StartDate,DurationRemaining = t.Duration - GetDaysPassed(t.StartDate,t.Duration),TaskDescription = t.Task, DaysPassed = GetDaysPassed(t.StartDate,t.Duration),Duration = t.Duration });
因为时间关系方案二并未实际测试,理论上是可以的。
测试效果
EFCORE 调用函数:
https://docs.microsoft.com/zh-cn/ef/core/querying/user-defined-function-mapping
[Linq] Linq如何调用外部方法?相关推荐
- 坚持学习WF(8):本地服务之调用外部方法
WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务.除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data ...
- 【翻译】WF从入门到精通(第八章):调用外部方法及工作流
上一篇:[翻译]WF从入门到精通(第七章):基本活动的操作例 学习完本章,你将掌握: 1.创建并调用你的工作流外部的本地数据服务 2.理解怎样使用接口来为宿主进程和你的工作流之间进行通 ...
- [导入]【翻译】WF从入门到精通(第八章):调用外部方法及工作流
摘要: 学习完本章,你将掌握: 1.创建并调用你的工作流外部的本地数据服务 2.理解怎样使用接口来为宿主进程和你的工作流之间进行通信. 3.使用设计的外部方法在你的工作流和宿主应用程序之间传输数据. ...
- C#使用linq查询大数据集的方法
这篇文章主要介绍了C#使用linq查询大数据集的方法,涉及C#调用linq进行数据查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 using System; using System.Coll ...
- LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。...
var data = DataSource.Skip(iDisplayStart).Take(iDisplayLength).Select(o => new{MatNR = o.MatNR,Ma ...
- QTP的那些事--调用外部的文件的方法
调用外部文件的四种方法 [方法一]:使用"SystemUtil.Run"命令 支持调用任何文件格式 例如: SystemUtil.Run "C:\testfile.txt ...
- 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式
本文由币乎社区(bihu.com)内容支持计划赞助. 在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和 ...
- LINQ to Entities 不识别方法“System.String ToString() 的解决方法
今天在做一个页面的时候出现了LINQ to Entities 不识别方法"System.String ToString()"的错误,对于源码IQueryable<Select ...
- as3调用外部swf里的类的方法
as3项目要调用外部swf里的类有3种方法: 1.将外部的swf发布为swc,使用时将swc引用添加到相应的项目中,这应该是最简单的一种引用.不过当项目中的类或组件比较多时就会使项目发布生成的swf文 ...
最新文章
- 赠票 | 中国数据智能管理峰会(上海)
- 徐铁:当深度学习握手脑科学-圣城会议归来
- linux find命令的日常使用
- 机器学习 - 竞赛网站,算法刷题网站
- Linux常用命令——tar
- ImageView相关
- AT2376-[AGC014D]Black and White Tree【结论,博弈论】
- JBoss Drools –入门
- 【译】谨慎使用CSS中的波浪选择器
- 软考复习之路—组成原理
- unittest Module中的常用6种断言方法
- Kafka 为什么能那么快的 6 个原因
- Bundle Adjustment简述(转载)
- [转载] 杜拉拉升职记——53 自由自在地活
- 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍
- 免费,好用的画图工具diagrams, 支持在线编辑
- 最全的前端程序员常用英语词汇都在这了~
- ElasticSearch(一)8.4.3版下载安装
- .*? 和 .*的区别
- Getaverse,走向 Web3 的远方桥梁