vb.net – 我只是不明白如何使用Linq

vb.net – 我只是不明白如何使用Linq,第1张

概述我有一个课程如下: Class Scan Delivered As Boolean ScanDate As Date State As String Facility As String End Class 然后我创建一个列表并用包含任何内容的扫描填充它. Dim Scans As New List(Of Scan) 我需要挖掘清单以获取各种信息.我想用LINQ 我有一个课程如下:

Class Scan    Delivered As Boolean    ScanDate As Date    State As String    Facility As String  End Class

然后我创建一个列表并用包含任何内容的扫描填充它.

Dim Scans As New List(Of Scan)

我需要挖掘清单以获取各种信息.我想用liNQ来做.问题是,对于我的生活,我只是没有得到它.语法将我抛弃,结果不是强类型的事实会让我失望,并且Web上的示例过于简单或过于复杂.

我怎么能

>获取扫描计数,按日期分配Delivered = True
>获取扫描计数,按设施分组,其中Delivered = True
>获取扫描计数,按状态分组,其中Delivered = True

然后我想在For Each循环中使用它.

For Each result In GroupedResults    ‘My CodeNext

理想情况下,我希望结果是强类型的.这可能吗?

任何人都可以推荐一些链接来开始这个?我遇到的每个网站都让我头脑发热.我根本不理解它.

编辑:

十分感谢大家.我仍然对这些东西感到头疼,但至少这是一个真实世界的例子,我可以用它来了解发生了什么.

我希望这个简单的例子可以帮助我进入一个更复杂的用途 – 没有运气.我本来应该这样做了.

所有示例似乎都使用键/值响应.如果我需要分组两个值,该怎么办?

Class Scan        Delivered As Boolean        Scanned As Boolean        ScanDate As Date        State As String        Facility As String      End Class1. Get a count of Delivered = True,a count  of Scanned=True,grouped by Date 2. Get a count of Delivered = True,a count  of  Scanned=True,grouped by Facility 3. Get a count of Delivered = True,grouped by State

是否有可能在一个结果中得到这个?

编辑编辑:

回答了我自己的编辑!这似乎对我有用:

Dim query = From r In scans _            Group r By r.ScanDate Into g = Group _            Select New With _            {g,.DeliveredCount = g.Count(Function(s) s.Delivered),.ScannedCount = g.Count(Function(s) s.Scanned)}

十分感谢大家.你让我到了可以解决问题的地步.我仍然没有“得到”我正在做的事情(什么是函数?!),但我有一些东西可以开始.我打算花时间学习这个.我认为真正让我失望的是网上的样本是C#. normaly我没有转换语法的问题,但是使用liNQ并不是那么简单.我以为我做错了什么,但只是语法非常不同.

解决方法 您不限于使用liNQ的查询语法.您还可以在集合上使用liNQ扩展方法.

您将收到的结果将是强类型.虽然在不返回现有类型时将使用匿名类型.

下面的代码是C#,但你会明白:

static voID Main( string[] args ){    List<Scan> scans = new List<Scan> ();    scans.Add (new Scan (new DateTime (2010,1,1),true,"Facility1"));    scans.Add (new Scan (new DateTime (2010,"Facility2"));    scans.Add (new Scan (new DateTime (2010,false,"Facility3"));    scans.Add (new Scan (new DateTime (2010,26),"Facility1"));    var result1 = scans.Where (s => s.Delivered).GroupBy (s => s.ScanDate);    foreach( var r in result1 )    {        Console.Writeline (String.Format ("Number of delivered scans for {0}: {1}",r.Key,r.Count ()));    }    var result2 = scans.Where (s => s.Delivered).GroupBy (s => s.Facility);    foreach( var r in result2 )    {        Console.Writeline (String.Format ("Number of delivered scans for {0}: {1}",r.Count ()));    }    Console.Readline ();}

此处的结果并非真正类型化,因为GroupBy表达式返回IGrouPing类型.
但是,通过这样做,你可以解决这个问题:

var result2 = scans.Where (s => s.Delivered)                    .GroupBy (s => s.Facility)                    .Select( s => new { Facility = s.Key,NumberOfItems = s.Count() } );

使用liNQ提供的扩展方法,可能会帮助您更多地理解它.

对不起C#语法,但我对VB.NET并不熟悉.

总结

以上是内存溢出为你收集整理的vb.net – 我只是不明白如何使用Linq全部内容,希望文章能够帮你解决vb.net – 我只是不明白如何使用Linq所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1239141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存