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