C# 如何使用linq从对象列表创建Guid(Guid[])列表?
我有一个密码:C# 如何使用linq从对象列表创建Guid(Guid[])列表?,c#,linq,C#,Linq,我有一个密码: { int i = 0; Guid[] ids = new Guid[clientCertifications.Count()]; foreach (Certification certif in clientCertifications) { ids[i] = certif.Id; i++; } retu
{
int i = 0;
Guid[] ids = new Guid[clientCertifications.Count()];
foreach (Certification certif in clientCertifications)
{
ids[i] = certif.Id;
i++;
}
return listOffices.GroupBy(lo => lo.pk_Office)
.Select(loG => loG.First()
.MapOfficeToModel(
loG.Where(g => g.FK_Guid.In(ids)).Select(g => g.FK_Guid).ToCertifications(clientCertifications)
));
}
我想知道是否可以使用select或linq的其他单词获取列表“ID”?在这个例子中,我使用了for和foreach循环,但我认为我们可以做得更短,不?行中:
loG.Where(g => g.FK_Guid.In(***here something like: clientCertifications.Select(o => o.Id ... )*** ids)).Select(g => g.FK_Guid).ToCertifications(clientCertifications)`
这段代码:
int i = 0;
Guid[] ids = new Guid[clientCertifications.Count()];
foreach (Certification certif in clientCertifications)
{
ids[i] = certif.Id;
i++;
}
基本上是以下内容的复杂版本:
var ids = clientCertifications.Select(certif => certif.Id).ToArray();
您应该能够将
clientCertifications.Select(certif=>certif.Id).ToArray()
放置在变量ids
的任何位置(如果它是纯LinQ)。如果您有一个LinQ提供程序,该提供程序执行可能无法工作的转换(例如到数据库语句),那么您可能需要临时变量。但是,如果您确实使用了这样的提供者,那么可能会有一种完全不同且可能更好的方法。这段代码:
int i = 0;
Guid[] ids = new Guid[clientCertifications.Count()];
foreach (Certification certif in clientCertifications)
{
ids[i] = certif.Id;
i++;
}
基本上是以下内容的复杂版本:
var ids = clientCertifications.Select(certif => certif.Id).ToArray();
您应该能够将
clientCertifications.Select(certif=>certif.Id).ToArray()
放置在变量ids
的任何位置(如果它是纯LinQ)。如果您有一个LinQ提供程序,该提供程序执行可能无法工作的转换(例如到数据库语句),那么您可能需要临时变量。但是,如果您确实使用了这样的提供程序,那么可能会有一种完全不同的更好的方法。这不会引发异常,因为数组从未初始化过吗?@maccettura我不知道您在说什么。如何初始化数组?为什么?@maccettura你是说引用的原始代码?是的,你是对的,我无意中修复了那个bug。@nvoigt不,我是说你的代码。正如鲁弗斯所说,ids
是空的,所以只要你用它的索引访问它throw@maccettura你知道那不是我的密码,而是行动计划,对吗?我引用它是为了说块可以简化。这不会引发一个异常,因为数组从未初始化过吗?@maccettura我不知道你在说什么。如何初始化数组?为什么?@maccettura你是说引用的原始代码?是的,你是对的,我无意中修复了那个bug。@nvoigt不,我是说你的代码。正如鲁弗斯所说,ids
是空的,所以只要你用它的索引访问它throw@maccettura你知道那不是我的密码,而是行动计划,对吗?我引用它是为了说块可以简化。Guid[]ids=clientCertifications.Select(certif=>certif.Id).ToArray()代码>var Id=clientCertifications.Select(x=>x.Id)
然后其中(g=>ids.Contains(g.FK_Guid))
Guid[]ids=clientCertifications.Select(certif=>certif.Id).ToArray()代码>var Id=clientCertifications.Select(x=>x.Id)
然后其中(g=>ids.Contains(g.FK_Guid))