programing

사용할 때.첫 번째 및 사용 시기.LINQ의 첫 번째 또는 기본값?

javamemo 2023. 5. 15. 20:58
반응형

사용할 때.첫 번째 및 사용 시기.LINQ의 첫 번째 또는 기본값?

.First그리고 당신이 사용하고 싶을 때.FirstOrDefaultLINQ를 사용합니다.

  • 언제 사용하시겠습니까?.First결과가 반환되지 않는 경우 예외를 적용하려는 경우에만 가능합니까?

    var result = List.Where(x => x == "foo").First();
    
  • 그리고 언제 사용하고 싶으십니까?.FirstOrDefault결과가 없으면 항상 기본 유형을 원할 때?

    var result = List.Where(x => x == "foo").FirstOrDefault();
    
  • 그리고 그 문제에 관해서는, 테이크는 어떻습니까?

    var result = List.Where(x => x == "foo").Take(1);
    

나는 사용할 것입니다.First()시퀀스에 적어도 하나의 요소가 있을 것으로 예상하거나 알고 있을 때.즉, 예외적으로 시퀀스가 비어 있는 경우입니다.

사용하다FirstOrDefault()요소가 있는지 여부를 확인해야 한다는 것을 참조하십시오. 있는 는. 시 가 비 것 있 합 경 인 적 우 입 니 다 즉 법 퀀 어 이 스 는 ▁in , ▁when ▁to 다 즉 ▁sequence ▁it 니 경 ▁empty 우 ▁for , ▁words검사에 예외 처리를 사용해서는 안 됩니다. (잘못된 관행이며 성능을 해칠 수 있습니다.)

마막으로, 사의차은점의 입니다.First()그리고.Take(1)은 것은입니다.First()자체를 , 요자체반는동안하환를은Take(1)정확히 하나의 요소를 포함하는 요소 시퀀스를 반환합니다.

.First결과가 없으면 예외를 던집니다. .FirstOrDefault 유형)합니다(예: like: like)0유형을 과 같은 경우입니다.여기서의 문제는 기본 유형을 원할 때가 아니라 다음과 같은 경우입니다.예외를 처리하시겠습니까, 아니면 기본값을 처리하시겠습니까? 때문에, 예는예이하므로야어,FirstOrDefault쿼리에서 결과를 가져올지 확신할 수 없는 경우 선호됩니다.논리적으로 데이터가 있어야 할 경우 예외 처리를 고려할 수 있습니다.

Skip()그리고.Take()일반적으로 결과의 페이징을 설정할 때 사용됩니다. (예: 처음 10개의 결과를 표시하고 다음 10개의 결과를 다음 페이지에 표시하는 것 등)

.First()반환할 행이 없는 경우 예외를 던질 것입니다..FirstOrDefault())을 반환합니다.NULL대신 모든 참조 유형에 대해)을 선택합니다.

그래서 만약 당신이 가능한 예외를 다룰 준비가 되어 있고 기꺼이 한다면,.First()괜찮습니다.다음에 대한 반환 값을 확인하려면!= null 어든쨌, 그럼..FirstOrDefault()그게 당신의 더 나은 선택입니다.

하지만 개인적인 취향도 있는 것 같아요.사용자에게 더 적합하고 코딩 스타일에 더 적합한 것을 사용합니다.

첫 번째()

  1. 시퀀스의 첫 번째 요소를 반환합니다.
  2. 결과에 요소가 없거나 소스가 null인 경우 오류가 발생합니다.
  3. 둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우 이를 사용해야 합니다.

첫 번째 또는 기본값()

  1. 시퀀스의 첫 번째 요소를 반환하거나 요소가 없으면 기본값을 반환합니다.
  2. 소스가 null인 경우에만 오류가 발생합니다.
  3. 둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우 사용해야 합니다.결과가 비어 있는 경우에도 좋습니다.

UserInfo 테이블이 있으며 아래와 같이 일부 레코드가 있습니다.아래 표를 기반으로 예제를 만들었습니다.

사용자 정보 표

먼저 사용하는 방법()

var result = dc.UserInfos.First(x => x.ID == 1);

ID == 1인 레코드는 하나뿐입니다.해야 합니다.
ID: 1 : 파일: Email:파일: xyz@xyz. com

var result = dc.UserInfos.First(x => x.FName == "Rahul");   

FName == "Rahul"의 여러 레코드가 있습니다.첫 번째 기록이 반환되어야 합니다.
ID : 7 이름 : 라훌성 : 이메일 :: xyz1@xyz.com com

var result = dc.UserInfos.First(x => x.ID ==13);

ID == 13의 레코드가 없습니다.오류가 발생해야 합니다.
Operation > 파일: 시퀀스.

FirstOrDefault() 사용 방법

var result = dc.UserInfos.FirstOrDefault(x => x.ID == 1);

ID == 1인 레코드는 하나뿐입니다.해야 합니다.
ID: 1 : 파일: Email:파일: xyz@xyz. com

var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");

FName == "Rahul"의 여러 레코드가 있습니다.첫 번째 기록이 반환되어야 합니다.
ID : 7 이름 : 라훌성 : 이메일 :: xyz1@xyz.com com

var result = dc.UserInfos.FirstOrDefault(x => x.ID ==13);

ID == 13의 레코드가 없습니다.반환 값이 null입니다.

언제 사용해야 하는지 이해하는 데 도움이 되기를 바랍니다.First()또는FirstOrDefault().

은일단.Take완전히 다른 방법입니다.다음을 반환합니다.IEnumerable<T> 단 한 의 한명도도.T그래서 그것은 끝났습니다.

사이First그리고.FirstOrDefault은 야합다니해를 사용해야 .First요소가 존재한다고 확신하고 존재하지 않으면 오류가 발생합니다.

그건 그렇고, 당신의 시퀀스에default(T) 요소):null첫 요소가 해야 합니다.null사용할 수 없습니다.FirstOrDefault.

첫 번째:

  • 시퀀스의 첫 번째 요소를 반환합니다.
  • 예외를 슬로우합니다.결과에 요소가 없습니다.
  • 다음과 같은 경우 사용:둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우

첫 번째 또는 기본값:

  • 시퀀스의 첫 번째 요소를 반환하거나, 요소를 찾을 수 없는 경우 기본값을 반환합니다.
  • 예외를 슬로우합니다.소스가 null인 경우에만
  • 다음과 같은 경우 사용:둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우.또한 결과가 비어 있어도 괜찮습니다.

보낸 사람: http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/

다른 프로그램을 디버깅하는 라인 번호에 수 때문에 를 식별할 수 입니다..First()예외가 발생한 메서드의 문은 어려울 수 있습니다.

또한 예외 메시지에는 사용한 람다 식이 포함되어 있지 않으므로 문제를 디버깅하기가 더욱 어렵습니다.

그래서 항상 사용하는 것입니다.FirstOrDefault()Null 입력이 예외적인 상황을 구성한다는 것을 알고 있지만,

var customer = context.Customers.FirstOrDefault(i => i.Id == customerId);
if (customer == null)
{
   throw new Exception(string.Format("Can't find customer {0}.", customerId));
}

첫 번째()

결과에 예상되는 요소가 하나 이상 포함되어 있으며 시퀀스의 첫 번째 요소만 포함해야 합니다.

첫 번째 또는 기본값()

FirstOrDefault()는 지정된 조건과 일치하는 요소가 없는 경우 기본 제네릭 컬렉션 유형의 기본값을 반환한다는 점을 제외하고 First()와 동일합니다.유효하지 않은 작업을 던지지 않습니다.요소를 찾을 수 없는 경우 예외입니다.그러나 요소 또는 시퀀스의 컬렉션이 예외를 발생시키기 때문에 null입니다.

이 함수 유형은 요소 연산자에 속합니다.몇 가지 유용한 요소 연산자가 아래에 정의되어 있습니다.

  1. 첫 번째/첫 번째 또는 기본값
  2. 마지막/마지막 또는 기본값
  3. 단일/단일 또는 기본값

특정 조건에 따라 시퀀스에서 단일 요소를 선택해야 할 때 요소 연산자를 사용합니다.여기 예가 있습니다.

  List<int> items = new List<int>() { 8, 5, 2, 4, 2, 6, 9, 2, 10 };

First() 연산자는 조건을 충족한 후 시퀀스의 첫 번째 요소를 반환합니다.요소가 발견되지 않으면 예외가 발생합니다.

int 결과 = 항목.where (항목 = > 항목 == 2).첫 번째();

FirstOrDefault() 연산자는 조건을 충족한 후 시퀀스의 첫 번째 요소를 반환합니다.요소를 찾을 수 없으면 해당 유형의 기본값을 반환합니다.

int 결과1 = 항목.where (항목 = > 항목 == 2).첫 번째 또는 기본값();

는 FirstOrDefaultFirstOrDefault의 .
http://thepursuitofalife.com//http://thepursuitofalife.com/the-linq-firstordefault-method-and-null-resultsets/
쿼리 결과가 없는 경우 First() 또는 Single()을 호출하여 단일 행을 가져오려면...시퀀스에 요소가 없습니다.

고지 사항:저는 LINQ를 사용해 본 적이 없기 때문에, 만약 이것이 너무 빗나간다면 죄송합니다.

다른 사람들은 사이의 차이점을 매우 잘 설명했습니다.First()그리고.FirstOrDefault()저는 이 방법들의 의미를 해석하는 데 한 걸음 더 나아가고 싶습니다. 생각에는 내생에는각는▁in에생각FirstOrDefault너무 많이 사용되고 있습니다.대부분의 경우 데이터를 필터링할 때 논리적 조건과 일치하는 요소 모음을 가져오거나 고유한 단일 요소(예: 사용자, 책, 게시물 등)를 사용하여 고유한 요소를 반환해야 합니다.그렇기 때문에 우리는 심지어 그렇게 말할 수 있습니다.FirstOrDefault()코드 냄새는 뭔가 문제가 있어서가 아니라 너무 자주 사용되고 있기 때문입니다.이 블로그 게시물은 주제를 자세히 살펴봅니다.IMO 대부분의 경우SingleOrDefault()훨씬 더 나은 대안이므로 이 실수를 조심하고 계약과 기대를 명확하게 나타내는 가장 적절한 방법을 사용해야 합니다.

someList.First(); // exception if collection is empty.
someList.FirstOrDefault(); // first item or default(Type)

어떤 걸로 할까요?예외/프로그램 실패에 대한 두려움이 아니라 비즈니스 논리에 의해 결정되어야 합니다.

예를 들어, 비즈니스 논리가 어떤 근무일에도 0개의 트랜잭션을 가질 수 없다고 말한다면(그냥 가정해보자).그런 다음 스마트 프로그래밍으로 이 시나리오를 처리하려고 하면 안 됩니다.저는 항상 이러한 컬렉션 위에 First()를 사용할 것이며, 다른 무언가가 비즈니스 로직을 망쳤을 때 프로그램이 실패하도록 할 것입니다.

코드:

var transactionsOnWorkingDay = GetTransactionOnLatestWorkingDay();
var justNeedOneToProcess = transactionsOnWorkingDay.First(): //Not FirstOrDefault()

저는 다른 사람들이 이것에 대해 논평하는 것을 보고 싶습니다.

좋아요, 제 2센트를 드릴게요.첫 번째 / 첫 번째 또는 기본값은 두 번째 생성자를 사용할 때 사용합니다.무엇인지 설명하지는 않겠지만, 예외를 유발하고 싶지 않기 때문에 항상 사용할 수 있는 경우입니다.

person = tmp.FirstOrDefault(new Func<Person, bool>((p) =>
{
    return string.IsNullOrEmpty(p.Relationship);
}));

linq 컬렉션에 단일 단순 쿼리를 구현하는 많은 방법들, 단지 우리가 sql에 조인을 작성하는 것, 필터는 필요성과 필요성에 따라 먼저 또는 마지막으로 적용될 수 있습니다.

다음은 컬렉션에서 ID가 있는 요소를 찾을 수 있는 예입니다.은 첫째, 에더덧면자이붙, 첫째은방법,FirstOrDefault컬렉션에 하나 이상의 레코드가 있을 때 이상적으로 동일하게 반환됩니다.그러나 컬렉션이 비어 있어도 괜찮은 경우.그리고나서First하지만 예를반환만지하FirstOrDefault돌아올 것입니다null또는 기본값.예를 들어.int0을 을 반환합니다.따라서 이러한 사용은 개인적인 선호라고 하지만 사용하는 것이 더 좋습니다.FirstOrDefault예외 처리를 방지합니다.여기 트랜잭션 목록 모음을 실행하는 예가 있습니다.

언급URL : https://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq

반응형