在一行中创建并传递IEnumerable方法

时间:2012-06-15 08:14:38

标签: c# ienumerable

我有这几行代码

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寻求帮助! 问候, 卢卡

4 个答案:

答案 0 :(得分:1)

你可以写一个扩展方法:

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>适用ICollection<T>,它会引入Count属性,否则会适当调整集合类型。

列表初始化程序语法的优点是您也可以将其用于已创建的列表对象(例如,如果从工厂方法获取列表对象)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用

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

作为列表初始值设定项

答案 3 :(得分:0)

首先,我不会这样做,导致代码已经很好,但如果你真的想要这样做,可能的伪代码之一可能是:

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

应该为你工作。

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