这个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()
答案 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();