사용할 때.첫 번째 및 사용 시기.LINQ의 첫 번째 또는 기본값?
.First
그리고 당신이 사용하고 싶을 때.FirstOrDefault
LINQ를 사용합니다.
언제 사용하시겠습니까?
.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()
그게 당신의 더 나은 선택입니다.
하지만 개인적인 취향도 있는 것 같아요.사용자에게 더 적합하고 코딩 스타일에 더 적합한 것을 사용합니다.
첫 번째()
- 시퀀스의 첫 번째 요소를 반환합니다.
- 결과에 요소가 없거나 소스가 null인 경우 오류가 발생합니다.
- 둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우 이를 사용해야 합니다.
첫 번째 또는 기본값()
- 시퀀스의 첫 번째 요소를 반환하거나 요소가 없으면 기본값을 반환합니다.
- 소스가 null인 경우에만 오류가 발생합니다.
- 둘 이상의 요소가 필요하고 첫 번째 요소만 원하는 경우 사용해야 합니다.결과가 비어 있는 경우에도 좋습니다.
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입니다.
이 함수 유형은 요소 연산자에 속합니다.몇 가지 유용한 요소 연산자가 아래에 정의되어 있습니다.
- 첫 번째/첫 번째 또는 기본값
- 마지막/마지막 또는 기본값
- 단일/단일 또는 기본값
특정 조건에 따라 시퀀스에서 단일 요소를 선택해야 할 때 요소 연산자를 사용합니다.여기 예가 있습니다.
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
또는 기본값.예를 들어.int
0을 을 반환합니다.따라서 이러한 사용은 개인적인 선호라고 하지만 사용하는 것이 더 좋습니다.FirstOrDefault
예외 처리를 방지합니다.
언급URL : https://stackoverflow.com/questions/1024559/when-to-use-first-and-when-to-use-firstordefault-with-linq
'programing' 카테고리의 다른 글
일부 파일만 커밋하려면 어떻게 해야 합니까? (0) | 2023.05.15 |
---|---|
AWS 람다에 해당하는 Azure는 무엇입니까? (0) | 2023.05.15 |
JavaScript console.log로 인해 다음 오류가 발생합니다. "메인 스레드에서 동기식 XMLHttpRequest가 사용되지 않습니다.." (0) | 2023.05.15 |
사용자가 양식 크기를 조정하지 못하도록 하려면 어떻게 해야 합니까? (0) | 2023.05.15 |
업데이트 후 Eclipse/EGIT가 기존 리포지토리 정보를 인식하도록 하는 방법은 무엇입니까? (0) | 2023.05.15 |