我有一个课程如下:
Class Scan
Delivered As Boolean
ScanDate As Date
State As String
Facility As String
End Class
Run Code Online (Sandbox Code Playgroud)
然后我创建一个列表并用包含任何内容的扫描填充它.
Dim Scans As New List(Of Scan)
Run Code Online (Sandbox Code Playgroud)
我需要挖掘清单以获取各种信息.我想用LINQ来做.问题是,对于我的生活,我只是没有得到它.语法将我抛弃,结果不是强类型的事实会让我失望,并且Web上的示例过于简单或过于复杂.
我怎么能
然后我想在For Each循环中使用它.
For Each result In GroupedResults
‘My Code
Next
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望结果是强类型的.这可能吗?
任何人都可以推荐一些链接来开始这个?我遇到的每个网站都让我头脑发热.我根本不理解它.
编辑:
十分感谢大家.我仍然对这些东西感到头疼,但至少这是一个真实世界的例子,我可以用它来了解发生了什么.
我希望这个简单的例子可以帮助我进入一个更复杂的用途 - 没有运气.我本来应该这样做了.
所有示例似乎都使用键/值响应.如果我需要分组两个值,该怎么办?
Class Scan
Delivered As Boolean
Scanned As Boolean
ScanDate As Date
State As String
Facility As String
End Class
1. 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, a count of Scanned=True, grouped by State
Run Code Online (Sandbox Code Playgroud)
是否有可能在一个结果中得到这个?
编辑编辑:
回答了我自己的编辑!这似乎对我有用:
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)}
Run Code Online (Sandbox Code Playgroud)
十分感谢大家.你让我到了可以解决问题的地步.我仍然没有"得到"我正在做的事情(什么是函数?!),但我有一些东西可以开始.我打算花时间学习这个.我认为真正让我失望的是网上的样本是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, 1, 1), true, "Facility2"));
scans.Add (new Scan (new DateTime (2010, 1, 1), false, "Facility3"));
scans.Add (new Scan (new DateTime (2010, 1, 26), true, "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.Key, r.Count ()));
}
Console.ReadLine ();
}
Run Code Online (Sandbox Code Playgroud)
这里的结果并不是真正类型化的,因为 GroupBy 表达式返回 IGrouping 类型。但是,您可以通过执行以下操作来解决此问题:
var result2 = scans.Where (s => s.Delivered)
.GroupBy (s => s.Facility)
.Select( s => new { Facility = s.Key, NumberOfItems = s.Count() } );
Run Code Online (Sandbox Code Playgroud)
使用 LINQ 提供的扩展方法也许可以帮助您更多地理解它。
抱歉 C# 语法,但我不太熟悉 VB.NET。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |