나는 주위를 수색 했었고, 당신이 언제 사용하고 싶은지에 관해 명확한 대답을 찾지 못했다..First
당신이 사용하고 싶을 때.FirstOrDefault
LINQ.
언제 사용하고 싶습니까?.First
? 반환 된 결과가 없으면 예외를 catch하고 싶을 때만?
var result = List.Where(x => x == "foo").First();
그리고 언제 사용하고 싶습니까?.FirstOrDefault
? 결과가 없으면 항상 기본 유형을 원하십니까?
var result = List.Where(x => x == "foo").FirstOrDefault();
그리고 그 문제에 관해, Take는 어떨까요?
var result = List.Where(x => x == "foo").Take(1);
나는First()
시퀀스가 최소한 하나의 요소를 갖고 있다는 것을 알거나 기대할 때. 즉, 시퀀스가 비어있는 예외적 인 경우입니다.
용도FirstOrDefault()
요소가 있는지 없는지를 확인할 필요가 있다는 것을 알 때. 다시 말해 시퀀스가 비어있는 것이 합법적 일 때입니다. 수표에 대한 예외 처리에 의존해서는 안됩니다. (그것은 나쁜 습관이고 성능을 해칠 수도 있습니다).
마지막으로,First()
과Take()
그것입니다.First()
요소 자체를 반환하고Take()
정확히 하나의 요소를 포함하는 요소의 시퀀스를 반환합니다. (매개 변수로 1을 전달하면).
.First
결과가없는 경우 예외가 throw됩니다..FirstOrDefault
그렇지 않으면 단순히 널 (참조 유형) 또는 값 유형의 기본값을 리턴합니다. (예 :0
int에 대해) 여기에있는 질문은 기본 유형을 원할 때가 아닙니다. 예외 : 예외를 처리하거나 기본값을 처리 할 의향이 있습니까? 예외는 예외적이어야하기 때문에,FirstOrDefault
결과에서 검색어를 가져올 지 확실하지 않은 경우 선호됩니다. 논리적으로 데이터가 있어야 할 때 예외 처리가 고려 될 수 있습니다.
Skip()
과Take()
결과에서 페이징을 설정할 때 일반적으로 사용됩니다. (처음 10 개의 결과를 보여주는 것과 다음 페이지의 다음 10 개를 보여주는 것과 같이)
희망이 도움이됩니다.
.FirstOrDefault
참조 형의 경우는 null를 돌려줍니다. 나는 "default"가 무엇인지 혼란스러워했다. 개체가 될 것입니다. 이 대답은 그 점을 분명히했습니다. - Mike Taverne
.FirstOrDefault ()가 기본값을 반환하는 동안 .First ()는 반환 될 행이 없으면 예외를 throw합니다.NULL
모든 참조 유형에 대해).
따라서 가능한 예외를 처리 할 준비가되어 있고 기꺼이한다면.First()
괜찮습니다. 어쨌든! = null의 반환 값을 확인하려면,.FirstOrDefault()
당신의 더 나은 선택입니다.
하지만 개인적인 취향이기도합니다. 어느 쪽이든 당신에게 더 맞는 것을 사용하고 코딩 스타일을 더 잘 맞 춥니 다.
먼저()
FirstOrDefault ()
우리는 UserInfos 테이블을 가지고 있습니다.이 테이블에는 아래와 같은 레코드가 있습니다. 아래의 표를 기반으로 예제를 만들었습니다 ...
First () 사용 방법
var result = dc.UserInfos.First(x => x.ID == 1);
ID == 1 인 레코드는 하나뿐입니다.이 레코드를 반환해야합니다.
ID : 1 이름 : Manish 성 : Dubey 이메일 : xyz@xyz.com
var result = dc.UserInfos.First(x => x.FName == "Rahul");
FName == "Rahul"인 여러 레코드가 있습니다. 첫 번째 기록은 반환되어야합니다.
ID : 7 이름 : Rahul 성 : Sharma 이메일 : xyz1@xyz.com
var result = dc.UserInfos.First(x => x.ID ==13);
ID == 13 인 레코드가 없습니다. 오류가 발생해야합니다.
InvalidOperationException : 시퀀스에 요소가 없습니다.
FirstOrDefault () 사용 방법
var result = dc.UserInfos.FirstOrDefault(x => x.ID == 1);
ID == 1 인 레코드는 하나뿐입니다.이 레코드를 반환해야합니다.
ID : 1 이름 : Manish 성 : Dubey 이메일 : xyz@xyz.com
var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");
FName == "Rahul"인 여러 레코드가 있습니다. 첫 번째 기록은 반환되어야합니다.
ID : 7 이름 : Rahul 성 : Sharma 이메일 : xyz1@xyz.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
.
먼저:
FirstOrDefault :
에서:http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/
또 다른 차이점은 프로덕션 환경에서 응용 프로그램을 디버깅 할 경우 줄 번호에 액세스 할 수 없으므로 특정 줄.First()
예외를 throw하는 메서드에서 문이 어려울 수 있습니다.
예외 메시지에는 문제를 일으킬 수있는 람다식이 포함되어 있지 않으므로 디버그하기가 어렵습니다.
그게 내가 항상 사용하는 이유 야.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));
}
먼저()
결과에 1 개 이상의 요소가 포함되어 있고 시퀀스의 첫 번째 요소 만 포함해야한다는 것을 알고 있습니다.
FirstOrDefault ()
FirstOrDefault ()는 지정된 조건과 일치하는 요소가없는 경우 기본 형식의 기본 형식의 기본값을 반환하는 것보다 First ()와 같습니다. 요소가 발견되지 않으면 InvalidOperationException을 throw하지 않습니다. 그러나 요소 또는 시퀀스의 수집은 예외를 throw하는 것보다 null입니다.
AppOars가 FirstOrDefault의 필요성을 설명하는 웹 사이트를 찾았습니다.
http://thepursuitofalife.com/the-linq-firstordefault-method-and-null-resultsets/
쿼리에 결과가없고 단일 행을 가져 오기 위해 First () 또는 Single ()을 호출하려는 경우 ... "요소에 시퀀스가 없습니다"예외가 발생합니다.
면책 조항 : 저는 LINQ를 사용한 적이 없으므로, 이것이 사과하는 것이 아니라면 사과드립니다.
someList.First(); // exception if collection is empty.
someList.FirstOrDefault(); // first item or default(Type)
어느 것을 사용해야합니까? 그것은 비즈니스 논리에 의해 결정되어야하며 예외 / 프로그램 실패에 대한 두려움이 아닙니다.
예를 들어, 비즈니스 로직에서 근무일에 아무런 트랜잭션도 가질 수 없다고 말하면 (단지 가정). 그런 다음 스마트 프로그래밍을 통해이 시나리오를 처리하려고해서는 안됩니다. 나는 항상 그러한 컬렉션에 대해 First ()를 사용할 것이고, 다른 것이 비즈니스 로직을 망쳐 버리면 프로그램을 실패하게 만들 것이다.
암호:
var transactionsOnWorkingDay = GetTransactionOnLatestWorkingDay();
var justNeedOneToProcess = transactionsOnWorkingDay.First(): //Not FirstOrDefault()
나는 다른 사람들이 이것에 대해 논평하는 것을보고 싶다.
좋아, 내 두 센트를 줘. First / Firstordefault는 두 번째 생성자를 사용할 때 사용됩니다. 나는 그것이 무엇인지에 대해서는 설명하지 않겠지 만 예외를 일으키고 싶지 않기 때문에 항상 잠재적으로 하나를 사용할 것입니다.
person = tmp.FirstOrDefault(new Func<Person, bool>((p) =>
{
return string.IsNullOrEmpty(p.Relationship);
}));
이 유형의 함수는 요소 연산자에 속합니다. 몇 가지 유용한 요소 연산자가 아래에 정의되어 있습니다.
특정 조건을 기반으로하는 시퀀스에서 단일 요소를 선택해야 할 때 요소 연산자를 사용합니다. 다음은 그 예입니다.
List<int> items = new List<int>() { 8, 5, 2, 4, 2, 6, 9, 2, 10 };
First () 연산자는 조건을 만족시킨 후 시퀀스의 첫 번째 요소를 반환합니다. 요소가 발견되지 않는 경우는 예외가 슬로우됩니다.
int result = items.Where (item => item == 2) .First ();
FirstOrDefault () 연산자는 조건을 만족시킨 후 시퀀스의 첫 번째 요소를 반환합니다. 요소가 발견되지 않으면 해당 유형의 기본값을 반환합니다.
int result1 = items.Where (item => item == 2) .FirstOrDefault ();
이전 게시물에 대한 답변을 게시하는 것에 대해 죄송합니다. 세부 사항 및 좋은 설명은 이렇게 읽힌다 urls를 아래에 읽으십시오http://www.technicaloverload.com/linq-single-vs-singleordefault-vs-first-vs-firstordefault/
linq 여러 가지 방법으로 컬렉션에 대한 단일 간단한 쿼리를 구현할 수 있습니다. 우리는 SQL에 조인을 작성하기 만하면 필요성과 필요성에 따라 필터를 처음 또는 마지막으로 적용 할 수 있습니다.
다음은 컬렉션에 id가있는 요소를 찾을 수있는 예제입니다.
이것에 대해 더 자세히 알려면 First Methods,FirstOrDefault
컬렉션에 적어도 하나 이상의 레코드가있는 경우 이상적으로 반환합니다. 그러나 컬렉션이 비어 있어도됩니다. 그때First
예외를 반환하지만FirstOrDefault
돌아올거야.null
또는 기본값. 예를 들어,int
그런 식의 사용은 개인적 선호라고는하지만, 사용하는 것이 더 낫다.FirstOrDefault
예외 처리를 피할 수 있습니다.
.First
과.FirstOrDefault
둘 다 술어를 인수로 취하므로var result = List.Where(x => x == "foo").First();
다음과 같이 재 작성 될 수있다.var result = List.First(x => x == "foo");
- Rian SchmitsSingle
과SingleOrDefault
. 사람들이 사용할 때 나는 싫어.First
그들이 정말로 의미 할 때Single
; ) - BartoszKP