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如何调用外部方法?相关推荐

  1. 坚持学习WF(8):本地服务之调用外部方法

    WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务.除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data ...

  2. 【翻译】WF从入门到精通(第八章):调用外部方法及工作流

    上一篇:[翻译]WF从入门到精通(第七章):基本活动的操作例 学习完本章,你将掌握:     1.创建并调用你的工作流外部的本地数据服务     2.理解怎样使用接口来为宿主进程和你的工作流之间进行通 ...

  3. [导入]【翻译】WF从入门到精通(第八章):调用外部方法及工作流

    摘要: 学习完本章,你将掌握: 1.创建并调用你的工作流外部的本地数据服务 2.理解怎样使用接口来为宿主进程和你的工作流之间进行通信. 3.使用设计的外部方法在你的工作流和宿主应用程序之间传输数据. ...

  4. C#使用linq查询大数据集的方法

    这篇文章主要介绍了C#使用linq查询大数据集的方法,涉及C#调用linq进行数据查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 using System; using System.Coll ...

  5. LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。...

    var data = DataSource.Skip(iDisplayStart).Take(iDisplayLength).Select(o => new{MatNR = o.MatNR,Ma ...

  6. QTP的那些事--调用外部的文件的方法

    调用外部文件的四种方法 [方法一]:使用"SystemUtil.Run"命令 支持调用任何文件格式 例如: SystemUtil.Run "C:\testfile.txt ...

  7. 深入了解以太坊虚拟机第4部分——ABI编码外部方法调用的方式

    本文由币乎社区(bihu.com)内容支持计划赞助. 在本系列的上一篇文章中我们看到了Solidity是如何在EVM存储器中表示复杂数据结构的.但是如果无法交互,数据就是没有意义的.智能合约就是数据和 ...

  8. LINQ to Entities 不识别方法“System.String ToString() 的解决方法

    今天在做一个页面的时候出现了LINQ to Entities 不识别方法"System.String ToString()"的错误,对于源码IQueryable<Select ...

  9. as3调用外部swf里的类的方法

    as3项目要调用外部swf里的类有3种方法: 1.将外部的swf发布为swc,使用时将swc引用添加到相应的项目中,这应该是最简单的一种引用.不过当项目中的类或组件比较多时就会使项目发布生成的swf文 ...

最新文章

  1. 赠票 | 中国数据智能管理峰会(上海)
  2. 徐铁:当深度学习握手脑科学-圣城会议归来
  3. linux find命令的日常使用
  4. 机器学习 - 竞赛网站,算法刷题网站
  5. Linux常用命令——tar
  6. ImageView相关
  7. AT2376-[AGC014D]Black and White Tree【结论,博弈论】
  8. JBoss Drools –入门
  9. 【译】谨慎使用CSS中的波浪选择器
  10. 软考复习之路—组成原理
  11. unittest Module中的常用6种断言方法
  12. Kafka 为什么能那么快的 6 个原因
  13. Bundle Adjustment简述(转载)
  14. [转载] 杜拉拉升职记——53 自由自在地活
  15. 【资料】翘首期盼247天!《阿里巴巴Java开发手册》扫描插件详情介绍
  16. 免费,好用的画图工具diagrams, 支持在线编辑
  17. 最全的前端程序员常用英语词汇都在这了~
  18. ElasticSearch(一)8.4.3版下载安装
  19. .*? 和 .*的区别
  20. Getaverse,走向 Web3 的远方桥梁

热门文章

  1. 计算机二级考试干货内容,计算机二级考试经验总结,干货满满!
  2. HP246 G6 笔记本升级
  3. DataGrip for Mac破解步骤详解,期限到2099年
  4. 吴忠军 - 养生之道 老人健康长寿的大秘诀
  5. 【渝粤题库】陕西师范大学292951 公司金融学Ⅱ 作业(专升本)
  6. 关于ucore实验一的资料查找
  7. byte最大值最小值的问题
  8. Q4营收同比增长34.7%,Saleforces股价为何总停滞不前?
  9. 揭秘北京龙泉寺,连清华北大学子都排队出家的神秘科研组织
  10. win7系统服务器文档,win7系统服务器