相关疑难解决方法(0)

代码相当于链式LINQ扩展方法调用中的'let'关键字

使用C#编译器查询理解功能,您可以编写如下代码:

var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
    from animalName in names
    let nameLength = animalName.Length
    where nameLength > 3
    orderby nameLength
    select animalName; 
Run Code Online (Sandbox Code Playgroud)

在上面的查询表达式中,let关键字允许将值传递给where和orderby操作,而无需重复调用animalName.Length.

什么是LINQ扩展方法调用的等效集合,它实现了"let"关键字在这里的作用?

c# linq extension-methods linq-to-objects

186
推荐指数
3
解决办法
5万
查看次数

LINQ-按相同功能过滤和排序的最有效方法

我正在寻找一种按功能对集合进行排序的有效方法,并同时根据该函数的求值对集合进行过滤。为了显示:

var materialsByExpiry = from m in materials
                        where m.ExpiryDate() >= today
                        orderby m.ExpiryDate()
                        select m;
Run Code Online (Sandbox Code Playgroud)

由于materials是一个大集合,并且ExpiryDate是一个非平凡的计算,因此我想最大程度地减少对的调用次数ExpiryDate。显然ExpiryDate,每种材料只需要调用一次,但是此代码将其调用n + q次,其中n是元素总数,q是通过过滤器的数量。

我可以看到一种可能性是定义一个结构,该结构可以存储物料及其有效期并进行处理。但是,有没有更有效的方法(花时间去制定自己的排序/过滤器算法)?

.net c# linq sorting

0
推荐指数
1
解决办法
100
查看次数

标签 统计

c# ×2

linq ×2

.net ×1

extension-methods ×1

linq-to-objects ×1

sorting ×1