有没有更有效的方法将LINQ结果转换为string []或List <string>?</string>

时间:2012-04-19 03:21:32

标签: c# linq

我正在寻找一种方法,将我的Linq查询的结果转换为字符串[]或List而不使用通常的循环方法。如果您想知道“示例很好,但您真正想做什么?”我正在尝试做示例所示的内容;我有一个对象集合,我想要一个字符串数组或对象列表中包含的唯一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);
    }
}

6 个答案:

答案 0 :(得分:3)

您只是在寻找ToList()

idStringList = uniqueIDs.ToList();

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

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

答案 1 :(得分:3)

var list = whatever.ToList();

通常的循环方法是什么?

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:1)

IEnumerable上有很多扩展方法可以用来实现这个

whateverList.ToList()
whateverList.ToArray()

答案 5 :(得分:0)

如果你真的想要一个数组字符串[],你可以做

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