如何使用动态 LINQ 求和

2023-11-25

我有以下内容,可以与动态 linq 库:

string where = "Price < 5";
string orderby = "BookID ASC";
IQueryable<T> MyDataQueryable = _DataRawBase.AsQueryable<T>();
MyDataQueryable = MyDataQueryable.Where(where).OrderBy(orderby);

现在我想查询 MyDataQueryable 以对某些字段进行求和(也许是平均值)。

我该怎么办呢?

就像是:

double mysum = MyDataQueryable.Sum("Price");  

会好的...


既然一切都是字符串类型,您可能想尝试:

var myDataQueryable = _DataRawBase.AsQueryable<T>()
    .Sum("Price");

使用以下扩展方法:

public static object Sum(this IQueryable source, string member)
{
    if (source == null) throw new ArgumentNullException(nameof(source));
    if (member == null) throw new ArgumentNullException(nameof(member));

    // The most common variant of Queryable.Sum() expects a lambda.
    // Since we just have a string to a property, we need to create a
    // lambda from the string in order to pass it to the sum method.

    // Lets create a ((TSource s) => s.Price ). First up, the parameter "s":
    ParameterExpression parameter = Expression.Parameter(source.ElementType, "s");

    // Followed by accessing the Price property of "s" (s.Price):
    PropertyInfo property = source.ElementType.GetProperty(member);
    MemberExpression getter = Expression.MakeMemberAccess(parameter, property);

    // And finally, we create a lambda from that. First specifying on what
    // to execute when the lambda is called, and finally the parameters of the lambda.
    Expression selector = Expression.Lambda(getter, parameter);

    // There are a lot of Queryable.Sum() overloads with different
    // return types  (double, int, decimal, double?, int?, etc...).
    // We're going to find one that matches the type of our property.
    MethodInfo sumMethod = typeof(Queryable).GetMethods().First(
        m => m.Name == "Sum"
             && m.ReturnType == property.PropertyType
             && m.IsGenericMethod);

    // Now that we have the correct method, we need to know how to call the method.
    // Note that the Queryable.Sum<TSource>(source, selector) has a generic type,
    // which we haven't resolved yet. Good thing is that we can use copy the one from
    // our initial source expression.
    var genericSumMethod = sumMethod.MakeGenericMethod(new[] { source.ElementType });

    // TSource, source and selector are now all resolved. We now know how to call
    // the sum-method. We're not going to call it here, we just express how we're going
    // call it.
    var callExpression = Expression.Call(
        null,
        genericSumMethod,
        new[] {source.Expression, Expression.Quote(selector)});

    // Pass it down to the query provider. This can be a simple LinqToObject-datasource,
    // but also a more complex datasource (such as LinqToSql). Anyway, it knows what to
    // do.
    return source.Provider.Execute(callExpression);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用动态 LINQ 求和 的相关文章

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • cpp.react库的C++源代码中奇怪的“->* []”表达式

    这是我在文档中找到的 C 片段cpp react 库 https github com schlangster cpp react implicit parallelism auto in D MakeVar 0 auto op1 in g
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 如何使用 x64 运行 cl?

    我遇到了和这里同样的问题致命错误 C1034 windows h 未设置包含路径 https stackoverflow com questions 931652 fatal error c1034 windows h no include
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 已发布的 .Net Core 应用程序警告安装 .Net Core,但它已安装

    我制作了一个 WPF 和控制台应用程序 供某人在我无法访问的私人服务器上使用 我使用 Visual Studio 2019 的内置 发布向导 来创建依赖于框架的单文件应用程序 当该人打开 WPF 应用程序时 他们会看到标准警告 他们单击 是
  • 如何递归取消引用指针(C++03)?

    我正在尝试在 C 中递归地取消引用指针 如果传递一个对象 那就是not一个指针 这包括智能指针 我只想返回对象本身 如果可能的话通过引用返回 我有这个代码 template
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 当用户更改 Windows 中的语言键盘布局时如何通知?

    I want to show a message to user when the user changes the language keyboard layout of Windows for example from EN to FR

随机推荐

  • 在 Python 3 中解压缩 gzip 服务器响应的最佳方法是什么?

    我原以为这会起作用 gt gt gt import urllib request as r gt gt gt import zlib gt gt gt r urlopen r Request http google com search q
  • 如何在 OpenGL-ES 2.0 中创建带有纹理(图像)的 Stencil 缓冲区

    我可以在 OpenGL 2 0 中准备带有纹理 图像 的模板吗 这样图像的某些部分将是透明的 因此它将按原样传输到模板缓冲区 然后将使用此模板缓冲区进行进一步绘制 由 datenwolf 编辑以解释答案中的 OP 问题更新 作者 Infin
  • 用向量函数进行数据表聚合,取2

    我正在努力使用 data table 来总结向量函数的结果 这在 ddply 中很容易 问题 1 使用带有向量输出的 昂贵的 函数进行聚合 dt lt data table x 1 20 y rep c a b each 10 这个 ddp
  • 通知中占用大量内存

    我正在开发一个带有服务的应用程序 该服务在通知区域中显示计时器的进度 带有进度条和文本 我在下面提取了一个具有相同问题的更简单的示例 服务代码 public class TNService extends Service private N
  • 如何在 PHP 中对 SHOW TABLES 查询结果应用分页

    我想对结果应用分页SHOW TABLES FROM DATABASE NAME 尝试使用LIMIT关键字 但会引发错误 通过分页 我的意思是查询返回的结果 表 将显示在多个页面上 mysql gt pager less mysql gt s
  • 在 SQL Server 2008 中使用 select 语句加上附加列插入表

    我正在尝试从 select 语句插入表 并向行添加其他参数 例如 SELECT Appt ID Pracitioner ID Appt Book ID Start Time UR NO Type Description FROM TempW
  • 有没有办法在 Windows 和 Linux 上使用 php 检测文件夹中的更改?

    我正在寻找一种解决方案来检测文件夹中的更改php 该应用程序可以在两个平台上运行 linux and windows 只要结果相同 我可能会针对每个平台使用不同的方法 我的愿望是 如果将文件 文件夹添加到目录中 我希望我的应用程序检测到这个
  • 如何在 Openshift3 中禁用粘性会话

    如果您在 Openshift3 中扩展 Pod 来自同一客户端 IP 地址的所有请求都会发送到具有关联会话的容器 是否有任何配置可以禁用粘性会话 如何管理 Openshift 中内部 HAProxy 的选项 对于后代 由于我遇到了同样的问题
  • 使用 Open CV Python 将 Alpha 通道添加到单色图像

    我一直在研究彩色图像 RGB 和带有 alpha 通道 RGBA 的彩色图像 从 RGBA 图像中读取 Alpha 通道非常简单 我什至可以分割图像的 4 个通道 有没有什么方法可以将 Alpha 通道添加到单色或灰度图像 另外 alpha
  • require 未定义 javascript

    编辑 我现在确实意识到了错误 当我测试我的需求时 我正在终端中运行我的脚本 老的 答案可能已经在页面上 但我一直无法找到它 我看到的一般答案是我不能使用 require 客户端 问题是我尝试运行的脚本在我的学校笔记本电脑上完美运行 但它不想
  • PHP随机洗牌数组维护键=>值

    我一直在谷歌上寻找答案 但似乎找不到一些万无一失的东西 而且真的不能把这个搞砸 进入生产站点 我拥有的是具有 20 多个过滤器的高级搜索 它返回一个包含 ID 和距离的数组 我需要做的就是将这些结果打乱 以便每次都以随机顺序显示 我现在出来
  • 应该在电子邮件中使用 PHP_EOL 吗?

    我看到很多 PHP 电子邮件实现都使用 r n 但我也看到其中一些使用 PHP EOL 常量 哪一个更好 谢谢你的帮助都会 如果这是为了终止电子邮件中的行 那么您需要查看的是电子邮件的规范 而不是任何特定平台上使用的规范 电子邮件中的行根据
  • 法拉第超时错误与omniauth(自定义策略)/门卫

    我目前正在关注这个铁路广播公司对于我的具体情况 我在omniauth的回调中遇到了法拉第超时错误 目前 我使用 Rails 应用程序作为 API 并使用骨干网作为 javascript 前端 在同一应用程序上 我决定使用 OAuth 锁定
  • 将 AngularJS html5mode 与 NodeJS 和 Express 结合使用

    我正在使用带有 Express 的 NodeJS 服务器来为我的 AngularJS 应用程序提供服务 当我使用 angularJS 默认路由 hashbangs 时 这一切都工作正常 但现在我正在尝试激活 html5 模式 我正在像这样激
  • Git 修改/重写(不添加/更改文件)

    我经常想编辑提交消息 而不必从上次提交中重新选择文件集 git commit file1 c file2 c 提交消息中的意外拼写错误 git commit file1 c file2 c amend 这可行 但我不想从原始提交中重新选择文
  • 让 cmake 和 home-brew 一起工作

    当我用自制程序 cmake 安装库时似乎找不到它们 对于使用brew安装的任意库 有没有一种简单的方法可以解决这个问题 Default 默认情况下 brew 的库安装到 usr local lib folder gt ls usr loca
  • 启动线程的不同方式有什么区别?

    我有一个名为MyThread它扩展了Thread类并实现了run 函数 当我想运行它时 我有两种方法 新建一个实例并调用该函数 例如 new MyThread start new一个实例并将该实例作为参数传递给Thread的构造函数 然后调
  • Fxxx私有类名前缀约定从何而来?

    在 C C 中 私有类变量的常见约定是m MyPrivateVar 并且我相信 m 代表 我的 我可能是错的 在 Delphi 中 私有类变量以F 例如F手柄等 F 是什么意思 福 有一些命名约定 以免在代码中迷失 这是一个例子来指出为什么
  • 创建独立的 Shiny 应用程序 - Chrome 错误

    我正在尝试按照这篇非常好的博客文章的说明创建一个闪亮的桌面应用程序 http www r bloggers com deploying desktop apps with r 所以基本上我有一个具有以下结构的文件夹 App GoogleCh
  • 如何使用动态 LINQ 求和

    我有以下内容 可以与动态 linq 库 string where Price lt 5 string orderby BookID ASC IQueryable