Linq to SQL 조건에서 데이터 행의 효율적인 무작위 검색
Linq to SQL을 사용하여 데이터베이스를 쿼리하는 것은 관계형 데이터베이스 데이터를 검색하는 강력한 방법입니다. 그러나 특정 조건을 적용하면서 임의의 행을 선택하면 몇 가지 문제가 발생합니다. 이 기사에서는 이 문제에 대한 효율적인 솔루션을 살펴봅니다.
시뮬레이션된 사용자 정의 함수(UDF) 사용
Linq to SQL에는 임의의 행을 선택하는 직접적인 방법이 없습니다. 이러한 제한을 극복하기 위해 데이터베이스에 모의 UDF를 만들 수 있습니다. 이는 다음과 같이 부분 데이터 컨텍스트 클래스에 메소드를 추가하여 달성할 수 있습니다.
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { // 证明我们的C#代码未使用... throw new NotImplementedException(); } }</code>
이 UDF는 SQL Server에서 무작위 순서를 지정하는 자리 표시자 역할을 합니다.
무작위 순서 적용
모의 UDF가 준비되면 ctx.Random()
메서드를 호출하여 LINQ 쿼리를 정렬할 수 있습니다. 이는 NEWID()
함수를 사용하여 무작위 정렬을 수행하도록 데이터베이스에 지시합니다.
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive // 你的筛选条件 orderby ctx.Random() select row).FirstOrDefault();</code>
이 쿼리는 지정된 기준을 충족하는 임의의 단일 행을 검색합니다.
실적 노트
이 UDF 방법을 사용하면 대규모 테이블의 성능에 영향을 미칠 수 있다는 점에 유의해야 합니다. 이 경우 보다 효율적인 접근 방식은 Count()
메서드를 사용하여 행 수를 결정하고 임의의 인덱스를 생성한 다음 Skip()
및 FirstOrDefault()
메서드를 사용하여 임의의 행을 검색하는 것입니다.
개수 기반 방법
<code class="language-csharp">var qry = from row in ctx.Customers where row.IsActive select row; int count = qry.Count(); // 第一次往返数据库 int index = new Random().Next(count); Customer cust = qry.Skip(index).FirstOrDefault(); // 第二次往返数据库</code>
위 내용은 Linq to SQL을 사용하여 조건이 있는 임의 행을 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!