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

时间:2014-10-13 12:39:42

标签: c# vb.net linq entity-framework

这个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.Count()不存在

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

2 个答案:

答案 0 :(得分:3)

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

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

select new DokumentMedDatumDTOModel()

但是在VB中你创建了一个不同的模型:

Select New DokumentModel

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

更具体的问题是,如果{#1}}“在C#中有效”,让我们来看看d.Count()是什么:

d

from d in response.Values from c in d d集合中的一个实例。但它在VB中是什么?:

response.Values

From dokument In response.Values From d In dokument 是来自d的实例集合的实例。完全不同的对象。来自此VB代码的“{1}}的”等效“将是:

response.Values

编译器不会检查变量的名称,只检查实例的类型。您在两个代码示例中的d.Count()变量是完全不同的类型/实例。

答案 1 :(得分:0)

我似乎很难相信LINQ是一个框架,对于Vb的工作方式与C#不同。但也许它确实如此,但计数功能是如此根本,我不得不相信别的东西是不对的。仅仅因为智能感知并没有表明它并不意味着它不在那里。这只意味着智能感知不会显示出来。在编写LINQ查询时,只要查询中的某些内容不正确,intellisense就会退出响应。

像这样开始简单。

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