c# - 使用点表示法在函数中封装和使用 LINQ 逻辑

标签 c# linq variables chaining

我尽力在标题中进行解释,但是我试图实现给 linq 语句一个“别名”,并仍然在点表示法中使用它们。请允许我进一步解释一下。

下面我们有一个应用了 linq 语句的列表:

private List<string> _matches;

var output = _matches.Where(x => x.EntityScore == 100).ToList();

我同意这很容易阅读。然而,我希望进一步简化它,特别是当语句开始变得更大时。这是 linq 变得比我关心的更长的示例:

private List<string> _matches;

var matchAddressList = _matches.Where(x => x.EntityDetails.Addresses.Any(x => x.Street.Equals(inputObject.Address)
                                                                           && x.StateProvinceDistrict.Equals(inputObject.State)
                                                                           && x.City.Equals(inputObject.City))).ToList();

我想做的是给某些 LINQ 组起别名,然后将该 linq 称为点运算符

例如:

var finalOutput = _matches.perfectMatches().addressMatches(inputObject).someOtherMatchCondition(inputObject)

我认为上面的行很清楚并且易于阅读。 future 的开发人员不一定需要研究逻辑。他们可以阅读企业域名并了解其用途。 我想避免使用以下行,因为我相信前面的代码更干净:

var finalOutput = someOtherMatchCondition(addressMatches(perfectMatches(_matches)));

上一行是我认为您将如何使用基本级别的函数来实现它。然而,我正在努力寻找一种方法来创建别名或将 linq 逻辑封装到业务域名中,然后将其用作点运算符。

我尝试过表达式主体定义:

public List<string> perfectMatches => _matches.Where(x => x.EntityScore == 100).ToList();

这是否需要另一个类的扩展?还是泛型的编写?或者我可能不知道执行此操作的标准方法?

最佳答案

更新:也许这也有帮助:
How to add custom methods for LINQ queries (C#)


它必须是一个扩展方法才能使用点表示法。 你的意思是这样吗?它是伪代码而不是工作。您可能需要尝试使用这些类型或尝试某种通用方法:

public class ProductionCode
{
    public void MyMain()
    {
        var myList = new List<EntityThingType>() { .... };

        var newList = myList.PerfectMatches().AddressMatches(myInputObject).ToList();
    }
}

public static class test
{
    public static IEnumerable<EntityThingType> PerfectMatches(this IEnumerable<EntityThingType> myList)
    {
        return myList.Where(x => x.EntityScore == 100);
    }


    public static IEnumerable<EntityThingType> AddressMatches(this IEnumerable<EntityThingType> myList, MyObjectType inputObject)
    {
        return myList.Where(x => x.EntityDetails.Addresses.Any(x => x.Street.Equals(inputObject.Address)
                                                                    && x.StateProvinceDistrict.Equals(inputObject.State)
                                                                    && x.City.Equals(inputObject.City)));
    }
}

关于c# - 使用点表示法在函数中封装和使用 LINQ 逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60120655/

相关文章:

c# - 如何在 C#.Net 中使用 MySQL 时摆脱 "Empty Path is not valid "错误

c# - 将字符串转换为 long 类型并在 asp.net MVC 中的 linq 查询中使用

linq - 向我推荐合适的 LINQ 提供程序(SQL 服务器、复杂查询)

jQuery:检查字符是否在字符串中

c# - 带有 Crystal Report 的 .Net 应用程序无法在共享主机中运行

C# 持久性 cookie

c# - MVC 将 ViewBag 传递给 Controller

c# linq 生成的查询长度超过限制。有什么办法可以提高这个限制吗?

c - c中变量声明的歧义行为

java - 从 Java 中的另一个类访问字符串