Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq从对象列表创建Guid(Guid[])列表?_C#_Linq - Fatal编程技术网

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))