複数の結合で正しい結果が得られないLinqクエリ

マイルズ

データベース関数を置き換えるために使用されているLinqクエリがあります。これは複数の結合を持つ最初のものであり、なぜ0の結果が返されるのか理解できないようです。

間違った返品につながる可能性のある違いを見つけることができれば、それは大いにありがたいです......私は私が持っているべきより長くそれを解決しようとしてきました。

Linqクエリ

context.StorageAreaRacks
    .Join(context.StorageAreas, sar => sar.StorageAreaId, sa => sa.Id, (sar, sa) => new { sar, sa })
    .Join(context.StorageAreaTypes, xsar => xsar.sar.StorageAreaId, sat => sat.Id, (xsar, sat) => new { xsar, sat })
    .Join(context.Racks, xxsar => xxsar.xsar.sar.RackId, r => r.Id, (xxsar, r) => new { xxsar, r })
    .Where(x => x.xxsar.sat.IsManual == false)
    .Where(x => x.r.IsEnabled == true)
    .Where(x => x.r.IsVirtual == false)
    .Select(x => new { x.xxsar.sat.Id, x.xxsar.sat.Name })
    .Distinct()
    .ToList();

これは、LINQクエリによって生成されるクエリです。

SELECT 
[Distinct1].[C1] AS [C1], 
[Distinct1].[Id] AS [Id], 
[Distinct1].[Name] AS [Name]
FROM ( SELECT DISTINCT 
    [Extent2].[Id] AS [Id], 
    [Extent2].[Name] AS [Name], 
    1 AS [C1]
    FROM   [dbo].[StorageAreaRacks] AS [Extent1]
    INNER JOIN [dbo].[StorageAreaTypes] AS [Extent2] ON [Extent1].[StorageAreaId] = [Extent2].[Id]
    INNER JOIN [dbo].[Racks] AS [Extent3] ON [Extent1].[RackId] = [Extent3].[Id]
    WHERE (0 = [Extent2].[IsManual]) AND (1 = [Extent3].[IsEnabled]) AND (0 = [Extent3].[IsVirtual])
)  AS [Distinct1]

必要な結果を生成するSQLクエリ

SELECT DISTINCT sat.Name, sat.Id
FROM StorageAreaRacks sar
    JOIN StorageAreas sa on sa.id = sar.StorageAreaId
    JOIN StorageAreaTypes sat on sat.id = sa.StorageAreaTypeId
    JOIN Racks r on r.id = sar.RackId
WHERE sat.IsManual = 0
    AND r.IsEnabled = 1
    AND r.IsVirtual = 0
Ivan Stoev

LINQメソッド構文で結合を使用すると、読みにくく、エラーが発生しやすくなります。

LINQクエリ構文で結合を使用する方が優れていますが、エラーが発生しやすく(間違ったキーで結合する可能性があります)、結合カーディナリティに関する情報は提供されません。

LINQ to Entitiesクエリに最適なのは、ナビゲーションプロパティを使用することです(Gert Arnoldがコメントで提案したように、LinqのJoinを使用しないでください。ナビゲート!を参照してください)。前述の欠点はありません。

クエリ全体は次のようになります。

var query = context.StorageAreaRacks
    .Where(sar => !sar.StorageArea.StorageAreaType.IsManual
        && sar.Rack.IsEnabled && !sar.Rack.IsVirtual)
    .Select(sar => new
    {
        sar.StorageArea.StorageAreaType.Id,
        sar.StorageArea.StorageAreaType.Name,
    })
    .Distinct();

または

var query = (
    from sar in context.StorageAreaRacks
    let sat = sar.StorageArea.StorageAreaType
    let r = sar.Rack
    where !sat.IsManual && r.IsEnabled && !r.IsVirtual
    select new { sat.Id, sat.Name })
    .Distinct();

シンプルで読みやすく、間違いの場所はほとんどありません。ナビゲーションプロパティはEFの最も美しい機能の1つであり、お見逃しなく。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SQLクエリで正しい結果が得られない

分類Dev

レルムクエリで正しい結果が得られない

分類Dev

2カウントクエリを結合しても正しい結果が得られない

分類Dev

MySQLとの複数の結合、予期しない結果が得られる

分類Dev

正規表現のOracleデータベースクエリで正しい結果が得られない

分類Dev

正確な結果が得られない2つのテーブルの内部結合クエリ

分類Dev

複数のスレッドがロックされていない場合でも正しい結果が得られます

分類Dev

Elasticsearchの用語クエリで結果が得られない

分類Dev

Oracleクエリ(PROC)で目的の結果が得られない

分類Dev

クエリで目的の結果が得られない

分類Dev

MySQL:GroupByの複数の列で正確な結果が得られない

分類Dev

クエリでGROUP_CONCATを使用して正しい結果が得られない

分類Dev

MySQLクエリで結果が得られない日付条件

分類Dev

Elasticsearchクエリで結果が得られない

分類Dev

クエリで結果が得られない

分類Dev

正しい結果が得られない場合は?

分類Dev

gteおよびlteクエリを使用してmongodbで正確な結果が得られない

分類Dev

C++ のインクリメント演算子で正しい結果が得られない

分類Dev

JPA / EclipseLink:結合されたWHEREクエリで期待される結果が得られない

分類Dev

SQLクエリが複数のANDで結果を取得しない

分類Dev

Mysql:IN句と内部クエリで正確な結果が得られないクエリ

分類Dev

SQLCOUNTで正しい結果が得られない

分類Dev

`dplyr :: case_when`で正しい結果が得られない

分類Dev

SQL複合結合で明確な結果が得られない

分類Dev

単純なクエリから結果が得られない

分類Dev

SQL ISNULLチェックで正しい結果が得られない

分類Dev

複数用語検索で結果が得られない

分類Dev

Rのmean()関数で正しい結果が得られないのはなぜですか?

分類Dev

Oracleクエリの実行がハングし、Javaで結果が得られない

Related 関連記事

  1. 1

    SQLクエリで正しい結果が得られない

  2. 2

    レルムクエリで正しい結果が得られない

  3. 3

    2カウントクエリを結合しても正しい結果が得られない

  4. 4

    MySQLとの複数の結合、予期しない結果が得られる

  5. 5

    正規表現のOracleデータベースクエリで正しい結果が得られない

  6. 6

    正確な結果が得られない2つのテーブルの内部結合クエリ

  7. 7

    複数のスレッドがロックされていない場合でも正しい結果が得られます

  8. 8

    Elasticsearchの用語クエリで結果が得られない

  9. 9

    Oracleクエリ(PROC)で目的の結果が得られない

  10. 10

    クエリで目的の結果が得られない

  11. 11

    MySQL:GroupByの複数の列で正確な結果が得られない

  12. 12

    クエリでGROUP_CONCATを使用して正しい結果が得られない

  13. 13

    MySQLクエリで結果が得られない日付条件

  14. 14

    Elasticsearchクエリで結果が得られない

  15. 15

    クエリで結果が得られない

  16. 16

    正しい結果が得られない場合は?

  17. 17

    gteおよびlteクエリを使用してmongodbで正確な結果が得られない

  18. 18

    C++ のインクリメント演算子で正しい結果が得られない

  19. 19

    JPA / EclipseLink:結合されたWHEREクエリで期待される結果が得られない

  20. 20

    SQLクエリが複数のANDで結果を取得しない

  21. 21

    Mysql:IN句と内部クエリで正確な結果が得られないクエリ

  22. 22

    SQLCOUNTで正しい結果が得られない

  23. 23

    `dplyr :: case_when`で正しい結果が得られない

  24. 24

    SQL複合結合で明確な結果が得られない

  25. 25

    単純なクエリから結果が得られない

  26. 26

    SQL ISNULLチェックで正しい結果が得られない

  27. 27

    複数用語検索で結果が得られない

  28. 28

    Rのmean()関数で正しい結果が得られないのはなぜですか?

  29. 29

    Oracleクエリの実行がハングし、Javaで結果が得られない

ホットタグ

アーカイブ