首页 > 解决方案 > LINQ 查询作为函数 C# 中的参数

问题描述

我有一个枚举EnumA 值 X、Y、Z、P、QRI 创建了一个Sort(linqquery as parameter)在 C#、.NET 版本 4.7.2 中调用的函数

我应该能够编写一个函数参数,例如

tt=>tt.X.Ascending().ThenBy(tt.Y).ThenBy(tt.P.Descending())

函数体将返回结果按 A 升序排序,然后按 Y 再按 P 降序排序。

这只是我想要实现的一个例子。

另一个例子:

RemoveColumn ( LINQquery as parameter)

    tt=>tt.X && tt.Y && tt.Q

[{  "X": "Name",  "Y": "Hello",  "Z": 10,  "P": "Some value",  "Q": " Hello Again",  "R": "my data"}, {  "X": " Ha ha ha ",   "Y": "by bye",   "Z": 100,   "P": " value",   "Q": " Again",   "R": "m data"},{   "X": " Your Name",   "Y": "why",   "Z": 9,   "P": "  Ok  Some value",   "Q": " Music",   "R": " atda" }, {   "X": "John",   "Y": "Nuew",   "Z": 10,   "P": "Why your  value",   "Q": " Ta ta ata Again",   "R": "  cycle" }]

以上也是我的示例 JSON。基于 linq 参数,我将在函数返回之前过滤或排序这个 JSOn。我如何能够将 LINQ 作为参数传递?

标签: c#.netlinq

解决方案


从它的声音你基本上需要这样做:

Func<IEnumerable<Data>, IEnumerable<Data>> transform =
    tt => tt.OrderBy(t => t.X).ThenBy(t => t.Y).ThenByDescending(t => t.P);

Func<Data, bool> predicate =
    t => t.X == "John" && t.Y == "Nuew" && t.Q == " Ta ta ata Again";

您将从课程开始Data

public class Data
{
    public string X;
    public string Y;
    public int Z;
    public string P;
    public string Q;
    public string R;
}

然后像这样读入:

IEnumerable<Data> data1 = JsonConvert.DeserializeObject<Data[]>(File.ReadAllText("file.json"));

然后调用以下命令:

IEnumerable<Data> data2 = transform(data1);

IEnumerable<Data> data3 = data2.Where(predicate);

这会给你这个:

数据


推荐阅读