Linq.Count()在VB.NET中不存在,但在C#中存在

本文关键字:不存在 存在 但在 NET Count VB Linq | 更新日期: 2023-09-27 18:26:18

这个linq问题在c#和字段AntalVersioner=d.Count()中非常有效。

List<DokumentModel> result = (from d in response.Values
                                            from c in d
                                            //let dk = response.
                                            select new DokumentMedDatumDTOModel()
                                            {
                                                DokumentId = c.DokumentId,
                                                Forfattare = c.Forfattare,
                                                Kommentar = c.Kommentar,
                                                Nyckelord = c.Nyckelord,
                                                AntalVersioner = d.Count(),
                                                VersionNr = c.VersionNr,
                                                Titel = c.Titel,
                                                SkapadAv = c.SkapadAv,
                                                OriginalFilNamn = c.OriginalFilnamn,
                                                Versions = (from p in d
                                                            select new Version()
                                                            {
                                                                FilUppladdatDatum = p.FilUppladdadDatum,
                                                                OriginalFilNamn = p.OriginalFilnamn,
                                                                SkapadAv = p.SkapadAv,
                                                                Titel = p.Titel,
                                                                VersionNr = p.VersionNr
                                                            }).ToList(),
                                            }).ToList();

当在VB.NET中尝试相同的事情时,d.计数()不存在

result = (From dokument In response.Values
            From d In dokument
            Select New DokumentMedDatumDTOModel With {.DokumentId = d.DokumentId, .Forfattare = d.Forfattare, .Kommentar = d.Kommentar, _
                                            .Nyckelord = d.Nyckelord, .VersionNr = d.VersionNr, .Titel = d.Titel, .SkapadAv = d.SkapadAv, _
                                            .OriginalFilNamn = d.OriginalFilnamn, _
                                            .Versions = (From t In dokument
                                                        Select New DokumentVersion With {.Forfattare = t.Forfattare, _
                                                                                        .DokumentId = t.DokumentId, _
                                                                                        .FilUppladdatDatum = t.FilUppladdadDatum, _
                                                                                        .OriginalFilNamn = t.OriginalFilnamn, _
                                                                                        .SkapadAv = t.SkapadAv, _
                                                                                        .Titel = t.Titel, _
                                                                                        .Kommentar = t.Kommentar, _
                                                                                        .Nyckelord = t.Nyckelord, _
                                                                                        .VersionNr = t.VersionNr}).ToList()
                                        }).ToList()

Linq.Count()在VB.NET中不存在,但在C#中存在

您的两个代码示例似乎在不同的类型上做着非常不同的事情。

例如,在C#中,您创建了一个模型:

select new DokumentMedDatumDTOModel()

但在VB中,您可以创建一个不同的模型:

Select New DokumentModel

因此,我怀疑无论使用何种语言,它们之间的一些事情都会有所不同。

更具体地说,如果d.Count()在C#中"有效",让我们看看d是什么:

from d in response.Values
from c in d

dresponse.Values集合中的一个实例。但是它在VB中是什么?:

From dokument In response.Values
From d In dokument

CCD_ 5是来自CCD_ 6的实例的集合的实例。完全不同的对象。此VB代码中d.Count()的"等价物"为:

dokument.Count();

编译器不检查变量的名称是否有任何内容,它只检查实例的类型。两个代码示例中的d变量是完全不同的类型/实例。

我很难相信LINQ作为一个框架,对Vb的作用与C#不同。但也许是这样,然而计数函数是如此的基本,以至于我不得不相信还有其他地方出了问题。智能感知没有显示并不意味着它不存在。这只是意味着智能感知没有显示出来。在编写LINQ查询时,intellisense会在查询中出现错误时立即退出响应。

像这样简单地开始。

var stuff = db.Customers.ToList();
var count = stuff.Count();