我希望能够查询父实体并过滤子集合的内容。
例如,我有一个 OrderHeaders 集合。我想使用 LINQ 查询此集合以返回所有 OrderHeaders,但我只希望包含一些相关的 OrderDetail 行。
我最好寻找一种解决方案,我可以在单个 LINQ 语句中完成所有这些操作。
以下控制台应用对此进行了演示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ
{
class Program
{
static void Main(string[] args)
{
List<OrderHeader> orders = GetOrderHeaders();
var filteredOrders = from p in orders
where p.Detail.Where(e => e.StockCode == "STK2").Count() > 0
select p;
foreach (var order in filteredOrders)
{
Console.WriteLine("Account {0} ", order.AccountCode);
foreach (var detail in order.Detail)
{
Console.WriteLine("StockCode {0}, Quantity {1}", detail.StockCode, detail.Quantity);
}
Console.WriteLine();
}
// The above will return the following:
// Account CUST1
// StockCode STK1, Quantity 1
// StockCode STK2, Quantity 2
//
// Account CUST2
// StockCode STK2, Quantity 1
// StockCode STK4, Quantity 2
// How can I get the following?
// Account CUST1
// StockCode STK2, Quantity 2
//
// Account CUST2
// StockCode STK2, Quantity 1
Console.ReadLine();
}
public static List<OrderHeader> GetOrderHeaders()
{
List<OrderHeader> orders = new List<OrderHeader>();
OrderHeader header =
new OrderHeader {
AccountCode = "CUST1",
Detail = new List<OrderDetail>()};
header.Detail.Add(
new OrderDetail { StockCode = "STK1", Quantity = 1 });
header.Detail.Add(
new OrderDetail { StockCode = "STK2", Quantity = 2 });
orders.Add(header);
header =
new OrderHeader
{
AccountCode = "CUST2",
Detail = new List<OrderDetail>()
};
header.Detail.Add(
new OrderDetail { StockCode = "STK2", Quantity = 1 });
header.Detail.Add(
new OrderDetail { StockCode = "STK4", Quantity = 2 });
orders.Add(header);
return orders;
}
}
public class OrderHeader
{
public string AccountCode { get; set; }
public List<OrderDetail> Detail {get; set;}
}
public class OrderDetail
{
public string StockCode { get; set; }
public int Quantity { get; set; }
}
}
非常感谢您提出任何建议。
保罗
最佳答案
尝试以下操作:
var filtered = orders
.Where(o => o.Detail.Any(d => d.StockCode == "STK2"))
.Select(o => new { Order = o, Details = o.Detail.Where(d => d.StockCode == "STK2") });
然后可以像这样使用:
foreach (var entity in filtered)
{
Console.WriteLine("Account {0} ", entity.Order.AccountCode);
foreach (var detail in entity.Details)
{
Console.WriteLine("StockCode {0}, Quantity {1}", detail.StockCode, detail.Quantity);
}
Console.WriteLine();
}
关于c# - LINQ - 过滤子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8896397/
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我有一个名为Post的类,我需要能够适应以下场景:如果用户选择了一个类别,则只显示该类别的帖子如果用户选择了一种类型,则只显示该类型的帖子如果用户选择了一个类别和类型,则只显示该类别中该类型的帖子如果用户没有选择任何内容,则显示所有帖子我想知道我的Controller是否不可避免地会因大量条件语句而显得粗糙...这是我解决此问题的错误方法-有谁知道我如何才能做到这一点?classPostsController 最佳答案 您最好遵循“胖模型,瘦Controller”的惯例,这意味着您应该将这种逻辑放在模型本身中。Post类应该能够报告
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?
我仍然收到标题中的“错误”消息,但不知道如何解决。在ApplicationController中,classApplicationController在routes.rb#match'set_activity_account/:id/:value'=>'users#account_activity',:as=>:set_activity_account--thisdoesn'tworkaswell..resources:usersdomemberdoget:action_a,:action_bendcollectiondoget'account_activity'endend和User
对于用户模型,我有一个过滤器来检查用户的预订状态,该状态由整数值(0、1或2)表示。UserActiveAdmin索引页上的过滤器是通过以下代码实现的:filter:booking_status,as::select然而,这会导致下拉选项为0、1或2。当管理员用户从下拉列表中选择它们时,我更愿意自己将它们命名为“未完成”、“待定”和“已确认”之类的名称。有没有办法在不改变booking_status在模型中的表示方式的情况下做到这一点? 最佳答案 假设booking_status是模型中的枚举字段,您可以使用:过滤器:booking
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用