如何从一个值中选择两个值

时间:2010-04-28 03:49:52

标签: c# linq

我想返回一个字符串集合,其中每秒的记录都是“0”,类似于:

        foreach (Customer c in customers)
        {
            yield return c.Name;
            yield return "0";
        }

我开始了:

customers.Select(c => new
                                      {
                                          c.Name,
                                          Second = "0"
                                      }).???

4 个答案:

答案 0 :(得分:7)

你需要SelectMany:

var resultList = 
    customers.SelectMany(c => new[] {c.Name, "0"});

这将获取您的源列表,并为每个项目后面插入一个“0”。

答案 1 :(得分:2)

我知道Select或任何其他内置的扩展方法没有任何重载会自动为您执行此类操作。你可以为它编写自己的扩展名:

public static class EnumerableExtensions
{
    public static IEnumerable<TResult> SelectWithSeparator<T, TResult>(
        this IEnumerable<T> source,
        Func<T, TResult> selector,
        TResult separator)
    {
        if (selector == null)
            throw new ArgumentNullException("selector");
        foreach (T item in source)
        {
            yield return selector(item);
            yield return separator;
        }
    }
}

然后:

var customerNames = customers.SelectWithSeparator(c => c.Name, "0");

答案 2 :(得分:1)

来自客户的c 选择新{   名称= c.Name,   秒= 0 }

或 顾客 。选择(c =&gt; new   {    名称= c.Name,    秒=“0”   }

其中任何一个都会给你一个IQueryable。您可以使用.ToList()扩展名获取列表。

  

但接着是什么?

此后你想做什么?

答案 3 :(得分:1)

替换。???使用分号,您将获得IEnumerable<'a>,其中'a是匿名类型,表示您的客户名称和您硬编码的值。

var query = customers.Select(c => new { Id = c.Name, Second = 0 });
foreach (var item in query)
{
   // work with item.Name and item.Second
}

编辑:为了从你的评论中得到你想要的东西,你可以做到这一点,你已经基本上已经写好了。只需将其包装在返回IEnumerable<string>

的函数中
static IEnumerable<string> GetCustomerNames(List<Customer> customers)
{
    foreach (Customer c in customers)
    {
        yield return c.Name;
        yield return "0";
    }
}