- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个看起来(简化)如下的数据库:
var reports = new[] {
new { ReportId = 1, Title = "Report A" },
new { ReportId = 2, Title = "Report B" },
};
var testCases = new[] {
new { TestId = 1, Title = "Test A" },
new { TestId = 2, Title = "Test B" },
new { TestId = 3, Title = "Test C" },
new { TestId = 4, Title = "Test D" },
new { TestId = 5, Title = "Test E" },
};
var testRuns = new[] {
new { TestId = 1, ReportId = 1 },
new { TestId = 2, ReportId = 1 },
new { TestId = 1, ReportId = 2 },
new { TestId = 2, ReportId = 2 },
new { TestId = 3, ReportId = 2 },
new { TestId = 4, ReportId = 2 },
};
因此,我想获得一个 testCases
列表,并与相应的 reports
分组,即:
Test A => [Report A, Report B]
Test B => [Report A, Report B]
Test C => [Report B]
Test D => [Report B]
Test E => []
我不确定如何在 SQL 或 LINQ 中表达这一点。我想我需要一个 group join 或一个 left outer join 或者不管它叫什么,但我还不知道正确的语法。我试过这样的东西,但仍然遗漏了一部分:
var result = tests.GroupJoin(reports, t => t.TestId, ???, (t, rs) => new { Test = t, Reports = rs });
或者可能有一种完全不同的方式来制定该查询。
编辑:并非 testCases
中的每个条目都在 testRuns
中被引用。
最佳答案
如果您可以不用 GroupJoin 也能生活,您可以使用 2 个简单的连接和一个 GroupBy
,如下所示:
var temp = from c in testCases
join ru in testRuns
on c.TestId equals ru.TestId into left
from l in left
join re in reports
on l.ReportId equals re.ReportId into foo
from f in foo
select new {
Test = c.Title,
Report = f
};
//Dump only in LinqPad!
temp.GroupBy(x => x.Test).Dump();
/编辑:如果你还想要空结果,你需要使用DefaultIfEmpty()
:
public class Report
{
public int ReportId { get; set; }
public string Title { get; set; }
}
public class TestCase
{
public int TestId { get; set; }
public string Title { get; set; }
}
public class TestRun
{
public int TestId { get; set; }
public int ReportId { get; set; }
}
var temp = from c in testCases
join ru in testRuns
on c.TestId equals ru.TestId into left
from l in left.DefaultIfEmpty(new TestRun())
join re in reports
on l.ReportId equals re.ReportId into foo
from f in foo.DefaultIfEmpty()
select new {
Test = c.Title,
Report = f
};
temp.Dump();
关于c# - 如何制定 GroupJoin() 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298192/
我有这 2 个列表 list1 和 list2 并创建了这个 GroupJoin: List1 是人员列表(Id、姓名),list2 是对象列表(Id、Car、Date)。 PS:list1 包含大约
在 GroupJoin 之后,我想包括 Book.Authors,因为字段 Book.Authors 将为空。但我不能。我应该怎么做才能解决这个问题? Queryable recent = Repos
我想在两个集合之间执行 GroupJoin,但基于除相等性之外的其他谓词。例如,如果我有一个包含项目的集合,每个项目都包含一个范围属性,我想将它们中的每一个与另一个集合中的项目相关联,该集合的某些属性
基本上,我想做的是左外连接两个表并将它们呈现在一个平面结果中。为简单起见,我的两个表如下所示: tot["nameA", "nameB", "nameC"] critItg["nameA", "nam
我对使用 Entity Framework 还很陌生,并且一直遇到代码无法编译的问题。我收到的错误消息是: The type arguments for method 'System.Linq.Que
我有一个看起来(简化)如下的数据库: var reports = new[] { new { ReportId = 1, Title = "Report A" }, new { Rep
我想花 5-6 个小时来了解有关 GroupJoin 的一些事情。我正在谈论使用 linq 查询数据库表。我了解 Join 和 GroupJoin 的作用,但我真的不明白我在哪里需要它。我觉得 Joi
我有以下代码 var profilesWithMailLists = profilesWithCf.GroupJoin( profile2Maillist,
我该如何解释(严重?)? 我有一个名为“规则”的实体,它是一些用于从 POCO[] 中挑选项目的“选择器”。有一定数量的字段可供选择。所有这些都在我的数据库对象中有详细说明。 我需要在网格中显示规则,
我有一个返回如下结果的 GroupJoin 查询: IEnumerable query = ICDUnitOfWork.AlphaGroups.Find() .GroupJoin(ICDUni
The GroupJoin method has no direct equivalent in relational database terms, but it implements a supe
这是我的代码显示的错误 Severity Code Description Project File Line Suppression State Error CS0411 The type argu
我一直在尝试使用 Join 和 GroupJoin 方法。问题看起来很简单。给定 TableA 和 TableB 作为数据映射,这样: class MyDataContext : DataContex
我已经生成/测试了两个要组合起来执行单个查询的 Observable。 一个用户可以有多个角色。每当他们的角色 ID 发生变化时,就需要更新数据。但是数据应该只在查询处于事件状态时更新(当前有一些控件
谁能解释一下 GroupJoin() 是什么? 它与常规 Join() 有何不同? 常用吗? 它只针对方法语法吗?查询语法呢? (一个 c# 代码示例会很好) 最佳答案 行为 假设您有两个列表: Id
我不明白为什么这不翻译。这似乎正是描述的用例 here . LINQ 表达式 DbSet() .GroupJoin( inner: DbSet(), outer
这是我第一次使用 GroupJoin。从我看到的示例来看,在其基本形式中使用似乎非常简单,但是当我使用它时,我总是会遇到 NavigationExpandingExpressionVisitor 异常
以下代码: const Rx = require('rx'); const gameRowObservable = Rx.Observable.fromArray([{ game_id: 1,
我正在尝试使用 GroupJoin 和 SelectMany 在 linq 中执行“左外连接”,但随后我还想使用 GroupBy 和 Sum 聚合结果。 但是当我执行下面的代码时,我得到: Syste
我有以下类(class) public class OrderItem { public Guid ID { get; set; } public Guid? ParentID { g
我是一名优秀的程序员,十分优秀!