[英]Linq Lambda join breaks when joining a table
我對lambda相當陌生。 我正在嘗試創建一個聯接,該聯接從數據庫中提取產品並聯接一個作者表。 但是我數據庫中的某些產品沒有作者,例如產品包。 因此,查詢不會提取這些記錄。
有沒有辦法在linq lambda中提取所有具有或沒有作者的產品的記錄。 類似於內部聯接還是右聯接? 這是我的數據庫/查詢:
數據庫
產品展示
+-----------------------------------------+--------+----+---------+
| FullName | TypeId | Id | Sku |
+-----------------------------------------+--------+----+---------+
| The Matrix | 1 | 23 | MAT |
| Lord Of The Rings | 1 | 22 | LOTR |
| Package: Lord of the rings & The Matrix | 2 | 33 | LOTRMAT |
+-----------------------------------------+--------+----+---------+
作者分配
+--------+----+----------+
| TypeId | Id | AuthorId |
+--------+----+----------+
| 1 | 23 | 1 |
| 1 | 22 | 2 |
+--------+----+----------+
s
+----------+------------------+
| AuthorId | Author |
+----------+------------------+
| 1 | The Wachowskis |
| 2 | J. R. R. Tolkien |
+----------+------------------+
查詢
var allitems = _contentService.Products.Select(
x => new {x.FullName, x.TypeId, x.Id, x.Sku})
.Join(
_contentService.AuthorAssignments,
x => new {x.TypeId, x.Id},
y => new {y.TypeId, y.Id},
(x, y) =>
new
{
x.Sku,
x.FullName,
x.Id,
x.TypeId,
y.AuthorId
})
.Join(
_contentService.Authors,
authId => authId.AuthorId ,
auth => auth.Id,
(authId, auth) =>
new
{
authId.Sku,
authId.FullName,
authId.Id,
authId.TypeId,
authId.Image,
auth.Author
});
這給了我這樣的結果:
+-------------------+--------+----+------+------------------+
| FullName | TypeId | Id | Sku | Author |
+-------------------+--------+----+------+------------------+
| The Matrix | 1 | 23 | MAT | The Wachowskis |
| Lord Of The Rings | 1 | 22 | LOTR | J. R. R. Tolkien |
+-------------------+--------+----+------+------------------+
當這就是我想要完成的
+-----------------------------------------+----------+----+---------+------------------+
| FullName | TypeId | Id | Sku | Author |
+-----------------------------------------+----------+----+---------+------------------+
| The Matrix | 1 | 23 | MAT | The Wachowskis |
| Lord Of The Rings | 1 | 22 | LOTR | J. R. R. Tolkien |
| Package: Lord of the rings & The Matrix | 2 | 33 | LOTRMAT | null |
+-----------------------------------------+----------+----+---------+------------------+
由於該軟件包不包含1個作者記錄,因此看起來像它只是忽略了它。 任何幫助是極大的贊賞。
更新
抱歉,我忘了提到我正在使用NHibernate。 因此,groupjoins沒有實現:(
這是查詢 方法語法:
var allitems = _contentService.Products
.Select(x => new {x.FullName, x.TypeId, x.Id, x.Sku})
.GroupJoin(_contentService.AuthorAssignments,
p => p.Id,
aa => aa.Id,
(p, aa) => new
{
p.Sku,
p.FullName,
p.Id,
p.TypeId,
AuthorId = aa.Select(x => x.AuthorId).FirstOrDefault()
})
.GroupJoin(_contentService.Authors,
p => p.AuthorId,
a => a.Id,
(p, a) => new
{
p.FullName,
p.TypeId,
p.Id,
p.Sku,
Author = a.Select(x => x.Author).FirstOrDefault()
});
輸出:
+--------------------------------+--------+----+---------+------------------+
| FULLNAME | TYPEID | ID | SKU | AUTHOR |
+--------------------------------+--------+----+---------+------------------+
| | | | | |
| The Matrix | 1 | 23 | MAT | The Wachowskis |
| | | | | |
| Lord Of The Rings | 1 | 22 | LOTR | J. R. R. Tolkien |
| | | | | |
| Package: Lord of the rings & T | 2 | 33 | LOTRMAT | null |
| he Matrix | | | | |
+--------------------------------+--------+----+---------+------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.