【解決方法】SQL クエリを C# LINQ qu に変換する

プログラミングQA


こんにちは、みんな、

私はlinqクエリを書くのが初めてです。 期待どおりの結果が得られる SQL クエリを作成しました。それを LINQ c# クエリに変換する必要があります。Linqer をインストールする権限がありません。誰か助けてください。 ありがとう。 これが私のSQLクエリです

SQL
select * from PatVisit p
inner join Device d on d.PattId = p.PatId and d.SyncDate is not null
where p.VisitDate in
( select max(VisitDate) from PatVisit pv where VisitId in (4,7,2,8,9) group by PatId )
and DATEDIFF(d,p.visitDate,GETDATE()) <10

私が試したこと:

LinqPad を試しましたが、そこで変換できません。

解決策 2

最初に質問に対する私のコメントを読んでください。

私が述べたように、あなたのクエリはの使用のために効率的ではありません [in] 句を 2 回。

SQL クエリを改善してみましょう。 したがって、この:

SQL
select * from PatVisit p
inner join Device d on d.PattId = p.PatId and d.SyncDate is not null
where p.VisitDate in
( select max(VisitDate) from PatVisit pv where VisitId in (4,7,2,8,9) group by PatId )
and DATEDIFF(d,p.visitDate,GETDATE()) <10

これで置き換えることができます:

SQL
DECLARE @finaldate DATETIME
SELECT @finaldate = DATEADD('d', -10, GETDATE())

SELECT p.*
FROM
(
    SELECT p1.*, ROW_NUMBER() OVER(PARTITION BY p1.PatId ORDER BY p1.VisitDate DESC) RowNo
    FROM PatVisit p1
    WHERE p1.VisitDate >= @finaldate AND p1.VisitId IN(4,7,2,8,9) 
) p INNER JOIN Device d on d.PattId = p.PatId and d.SyncDate is not null
WHERE p.RowNo=1;

ご覧のとおり、私は使用しました ROW_NUMBER() 関数[^]、ネストされたクエリから最初の行のみを取得するのに非常に便利です。
ご了承ください WHERE 条件が含まれていません 日付差分[^] 関数、比較によってデータを制限できるため VisitDate 最終日まで( @finaldate 変数)。

上記のクエリはおそらくさらに改善される可能性がありますが、データにアクセスできず、データ構造が表示されません…

linqクエリに関しては…
該当するものはありません [IN] Linqの句ですが…使用できます どこ[^] 一緒に どれでも[^] 方法。 見る:

C#
int[] vid2get = new int[]{4,7,2,8,9};
var qry1 = PatVisit_context
	.Where(x=> vid2get.Any(y=>y==x.VisitId));

したがって、linq クエリの最終バージョンは次のようになります。

C#
int[] vid2get = new int[]{4,7,2,8,9};
DateTime finaldate = DateTime.Now.AddDays(-10);
var qry1 = (from pv in PatVisit_context
	.Where(x=> vid2get.Any(y=>y==x.VisitId) && x.VisitDate >= finaldate)
	.GroupBy(x=> x.PatId)
	.Select(grp=> grp.OrderByDescending(y=>y.VisitDate).First())
	join d in Device_context on pv.PatId equals d.PatId && d.SyncDate != null
	select pv)
	.ToList();

幸運を!

解決策 1

最初の寄港地

基本的な LINQ クエリ操作 (C#) | Microsoft Docs[^]

次に、ここで例を見てください

LINQ クエリの使用[^]

コメント

タイトルとURLをコピーしました