【问题标题】:Is there a more efficient way to convert LINQ result to string[] or List<string>?有没有更有效的方法将 LINQ 结果转换为 string[] 或 List<string>?
【发布时间】:2012-04-19 11:35:35
【问题描述】:

我正在寻找一种方法来将我的 Linq 查询结果转换为字符串 [] 或列表,而无需使用通常的循环方法。如果您想知道“示例很好,但您真正想要做什么?”我正在尝试做示例显示的内容;我有一个对象集合,我想要一个字符串数组或对象列表中包含的唯一 ID 列表。

我认为代码示例说明了一切。这是一个可以运行的完整程序。

using System.Collections.Generic;
using System.Linq;

class Program
{
    class DataModel
    {
        public DataModel(string id) { ID = id; }
        public string ID;
    }

    static void Main(string[] args)
    {
        var dummyData = new DataModel[]
        {
            new DataModel("1"),
            new DataModel("1"),
            new DataModel("2"),
            new DataModel("3"),
            new DataModel("3")
        };

        //  This works fine
        var uniqueIDs = 
            from model in dummyData
            group model by model.ID into grouped
            select grouped.Key;

        //  This is the part that bugs me, it's so inelegant...
        List<string> idStringList = new List<string>();
        foreach (var id in uniqueIDs)
            idStringList.Add(id);
    }
}

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    你只是在寻找ToList():

    idStringList = uniqueIDs.ToList();
    

    如果您只是想要该列表,您也可以直接将其添加到查询中:

    var idStringList = (from model in dummyData
                        group model by model.ID into grouped
                        select grouped.Key).ToList();
    

    【讨论】:

    • 很难选择最佳答案,但这个答案很早而且很完整 - 谢谢
    • @SteveK: dummyData.Select(m =&gt; m.Id).Distinct().ToList()
    【解决方案2】:
    var list = whatever.ToList();
    

    常用的循环方法是什么?

    【讨论】:

    • 我在示例中展示的方法,即常用方法。我想通常取决于每个人,我的词选择不佳。谢谢你的回答,很干净,我在找什么。
    【解决方案3】:

    为什么不只是uniqueIDs.ToList(); 这是 IEnumerable 上的扩展方法。 Here is the MSDN

    【讨论】:

    • 因为我不知道它的存在 ;0) 我不知何故错过了它,谢谢!
    • @SteveK 总是乐于提供帮助 :) LINQ 确实让很多样板代码变得非常简单!
    【解决方案4】:

    您可以在一行中完成整个操作:

    List<string> uniqueIDs = dummyData.Select(model => model.ID).Distinct().ToList();
    

    ToArray() 方法的工作方式类似,但会提供一个数组。

    【讨论】:

      【解决方案5】:

      IEnumerable 上有许多扩展方法,您可以使用它来实现这一点

      whateverList.ToList()
      whateverList.ToArray()
      

      【讨论】:

        【解决方案6】:

        如果你真的想要一个数组string[],你可以这样做

        string[] myArray = (from model in dummyData
                        group model by model.ID into grouped
                        select grouped.Key.ToString()).ToArray();
        

        【讨论】:

        • @JustinPihony string[] 显示结果是正确的类型和 ToString 因为如果你使用 var,你会得到一个 int[] 或任何 Key 类型。而且还没有迟到,因为没有人展示一个清晰的数组示例(仅列表)。
        • @JustinPihony 感谢您的指出,我已编辑。下次我会花更多时间回复仔细检查;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-02
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        相关资源
        最近更新 更多