我正在寻找一种方法,将我的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);
}
}
答案 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();