C# 是否有更有效的方法将LINQ结果转换为字符串[]或列表<;字符串>;?

C# 是否有更有效的方法将LINQ结果转换为字符串[]或列表<;字符串>;?,c#,linq,C#,Linq,我正在寻找一种方法,将Linq查询的结果转换为字符串[]或列表,而不使用通常的循环方法。如果你想知道“示例很好,但你真正想做什么?”我正在尝试做示例显示的事情;我有一个对象集合,我想要一个字符串数组或对象列表中包含的唯一ID列表 我认为代码示例说明了这一切。这是一个你可以运行的完整程序 using System.Collections.Generic; using System.Linq; class Program { class DataModel { pu

我正在寻找一种方法,将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);
    }
}
使用System.Collections.Generic;
使用System.Linq;
班级计划
{
类数据模型
{
公共数据模型(字符串id){id=id;}
公共字符串ID;
}
静态void Main(字符串[]参数)
{
var dummyData=新数据模型[]
{
新数据模型(“1”),
新数据模型(“1”),
新数据模型(“2”),
新数据模型(“3”),
新数据模型(“3”)
};
//这个很好用
var uniqueIDs=
从dummyData中的模型
按model.ID将模型分组为分组
选择分组键;
//这是让我讨厌的部分,太不雅观了。。。
List idStringList=新列表();
foreach(uniqueid中的变量id)
idStringList.Add(id);
}
}

为什么不干脆
uniqueIDs.ToList()这是IEnumerable上的扩展方法

您只是在寻找
ToList()

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

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

什么是常用的循环方法?

IEnumerable上有许多扩展方法,您可以使用它们来实现类似的功能

whateverList.ToList()
whateverList.ToArray()

如果确实需要数组字符串[],可以这样做

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

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

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

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

我在示例中展示的方法,即通常的方法。我想这取决于每个人,而我的用词不当。谢谢你的回答,非常干净,我在寻找什么。因为我不知道它的存在;不知怎的,我错过了,谢谢@SteveK总是乐于帮忙:)LINQ真的让很多样板代码变得非常简单@JustinPihony string[]显示结果的类型和ToString是否正确,因为如果使用var,将得到int[]或任何键类型。而且也不迟,因为没有人给出一个清晰的数组示例(仅列表)。@JustinPihony谢谢你指出,我编辑了。下次我会花更多的时间来回复复查;)很难找到最好的答案,但这是一个早期和完整的-thanks@SteveK:
dummyData.Select(m=>m.Id).Distinct().ToList()
string[] myArray = (from model in dummyData
                group model by model.ID into grouped
                select grouped.Key.ToString()).ToArray();
List<string> uniqueIDs = dummyData.Select(model => model.ID).Distinct().ToList();