在一行中创建 IEnumerable to 方法并将其传递给方法

本文关键字:方法 to IEnumerable 一行 创建 | 更新日期: 2023-09-27 18:37:11

我有这几行代码

FilterCondition CustomerID = new FilterCondition("Customer_ID",cust.Customer_ID,FilterCondition.FilterOperator.Equals);
        List<FilterCondition> conditions = new List<FilterCondition>();
        conditions.Add(CustomerID);
        conditions.Add(Location_is_last_used);
        Location loct = Store.Select<Location>(conditions).First();

我试图让它像这样工作

Store.Count<Customer>(new List<FilterCondition>().Add(new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals))

但这行不通,因为 Add 返回 void 并且让我发疯,还有其他方法可以在一行中解决这个问题吗? 我真的不想为我需要的一切编写条件。

Tnx寻求帮助!问候卢卡

在一行中创建 IEnumerable to 方法并将其传递给方法

你可以编写一个扩展方法:

public static class MyExtensions
{
    public static ICollection<T> AddChainable<T>(this ICollection<T> collection, T newItem)
    {
        collection.Add(newItem);
        return collection;
    }
}

然后,您可以按如下方式调用它:

Store.Count<Customer>(new List<FilterCondition>().AddChainable(new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals));

(假设Store.Count<T>在引入Count属性的 ICollection<T> 上工作,否则适当调整集合类型。

与列表初始值设定项语法相比,它的优点是您也可以将其用于已创建的列表对象(例如,如果您从工厂方法获取列表对象)。

Store.Count<Customer>(new FilterCondition[]{new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals)}.ToList())
您可以使用

new List<FilterConditions>() { new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals) }

作为列表初始值设定项

首先,我不会这样做,因为代码已经很好了,但是如果你真的想这样做,其中一个可能的伪代码可能是:

Location loct = Store.Select<Location>(new List<FilterCondition>{
           new FilterCondition{value = CustomerID}, 
            new FilterCondition{value = Location_is_last_used}
}).First();

应该为你工作。

重复一遍,在我看来,你的代码是一种更好的方式。它更容易阅读。