从IEnumerable <t>到IEnumerable <quantity <t>&gt;中选择

时间:2016-07-23 16:15:31

标签: c# linq

比方说,我有一个像这样的集合:

Apple
Banana
Banana
Apple
Apple
Pear
Banana
Grape
Orange
Pear

正如您所看到的,这些项目中有一些是其中的一部分。我想要的是一个展示物品及其数量的集合。例如,上面的数据将显示如下:

Apple (3)
Banana (3)
Pear (2)
Grape (1)
Orange (1)

我创建了一个班级......

public class Quantity<T>
{
    public Quantity(T item, int count)
    {
        Item = item;
        Count = count;
    }

    public T Item { get; private set; }
    public int Count { get; private set; }
}

我假设可以使用某种Select语句来完成LINQ,该语句可以从IEnumerable<T>投射到IEnumerable<Quantity<T>> ......就是说,我&#39 ;不是最模糊的如何开始: - | ......有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果输入为string,则可以使用以下GroupBy和Select projection。

var result = food.GroupBy(fruit => fruit)
                    .Select(fruit => new Quantity<string>(fruit.Key, fruit.Count()));

答案 1 :(得分:1)

您可以使用LINQ提供的GroupBy方法。它的工作原理是将特定值相同的项分组到单独的集合中。

请参阅以下示例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="data" name="data">
  <tr>
    <td colspan="9">
      <input type="button" value="Add" name="clone" id="clone">
      <input type="button" value="Remove" name="remove" id="remove">
    </td>
  </tr>
  <tr align="center">
    <td rowspan="2">N°</td>
    <td rowspan="2">Activity</td>
    <td rowspan="2">Field1</td>
    <td rowspan="2">Resources</td>
    <td colspan="2">Dates</td>
    <td rowspan="2">Field2</td>
    <td rowspan="2">Date 1</td>
    <td rowspan="2">Status</td>
  </tr>
  <tr align="center">
    <td>Start Date</td>
    <td>End Date</td>
  </tr>
  <tr name="parent" id="parent">
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="1" required>
      <input id="val[]" name="val[]" type="hidden" value="13256">
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="2" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="3" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="4" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="5" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="6" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="7" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="8" required>
    </td>
    <td align="center">
      <input id="val[]" name="val[]" type="text" value="9" required>
    </td>
  </tr>
</table>
<table>
  <tr>
    <td>Hello world!</td>
  </tr>
</table>

要查看此示例的实际效果,请查看以下.NET fiddle