2

我正在寻找一种方法来将我的 Linq 查询的结果转换为 string[] 或 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);
    }
}
4

6 回答 6

3

您只是在寻找ToList()

idStringList = uniqueIDs.ToList();

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

var idStringList = (from model in dummyData
                    group model by model.ID into grouped
                    select grouped.Key).ToList();
于 2012-04-19T03:23:18.213 回答
3
var list = whatever.ToList();

常用的循环方法是什么?

于 2012-04-19T03:23:20.710 回答
2

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

于 2012-04-19T03:23:10.867 回答
2

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

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

ToArray()方法的工作原理类似,但将提供一个数组。

于 2012-04-19T03:30:36.290 回答
1

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

whateverList.ToList()
whateverList.ToArray()
于 2012-04-19T03:25:39.517 回答
0

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

string[] myArray = (from model in dummyData
                group model by model.ID into grouped
                select grouped.Key.ToString()).ToArray();
于 2012-04-19T03:27:49.240 回答