Linq의 여러 WHERE 절
LINQ를 처음 사용하고 여러 where 절을 실행하는 방법을 알고 싶습니다. 이것이 내가 원하는 것입니다. 특정 사용자 이름을 필터링하여 레코드를 반환합니다. 아래 코드를 시도했지만 예상대로 작동하지 않습니다.
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where ((r.Field<string>("UserName") != "XXXX") || (r.Field<string>("UserName") != "XXXX"))
select r;
DataTable newDT = query.CopyToDataTable();
미리 도와 주셔서 감사합니다 !!!
글쎄, 당신은 여러 "where"절을 직접 넣을 수 있지만, 나는 당신이 원하지 않는다고 생각합니다. 여러 "where"절은 더 제한적인 필터로 끝납니다 . 덜 제한 적인 필터를 원한다고 생각합니다 . 나는 당신이 정말로 원한다고 생각합니다.
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where r.Field<string>("UserName") != "XXXX" &&
r.Field<string>("UserName") != "YYYY"
select r;
DataTable newDT = query.CopyToDataTable();
|| 대신 &&를 참고하십시오. 사용자 이름이 XXXX없는 경우 행을 선택합니다 및 사용자 이름이 YYYY 없습니다.
편집 : 전체 컬렉션이있는 경우 더 쉽습니다. 컬렉션이 호출되었다고 가정합니다 ignoredUserNames
.
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where !ignoredUserNames.Contains(r.Field<string>("UserName"))
select r;
DataTable newDT = query.CopyToDataTable();
이상적으로 HashSet<string>
는 Contains
통화 시간이 오래 걸리는 것을 피하기 위해 이것을 a로 만들고 싶지만 컬렉션이 충분히 작 으면 많은 확률을 얻지 못할 것입니다.
@ 테오
LINQ 변환기는 다음을 실행할 수있을만큼 똑똑합니다.
.Where(r => r.UserName !="XXXX" && r.UsernName !="YYYY")
나는 LinqPad에서 이것을 테스트했습니다 ==> 예, Linq 번역기는 충분히 똑똑합니다 :))
@Jon : Jon, 예를 들어 where 절을 여러 개 사용하고 있습니까?
var query = from r in tempData.AsEnumerable()
where r.Field<string>("UserName") != "XXXX"
where r.Field<string>("UserName") != "YYYY"
select r;
사용하는 것보다 더 절제 적입니다
var query = from r in tempData.AsEnumerable()
where r.Field<string>("UserName") != "XXXX" && r.Field<string>("UserName") != "YYYY"
select r;
결과적으로는 동등하다고 생각합니다.
그러나 첫 번째 예제에서 두 개의 하위 쿼리에서 원인을 여러 개 사용하는 경우 즉 .Where(r=>r.UserName!="XXXX").Where(r=>r.UserName!="YYYY)
, LINQ 변환기가 실행하기에 충분히 똑똑한 경우 테스트하지 않았습니다..Where(r=>r.UserName!="XXXX" && r.UsernName!="YYYY")
또한 bool 메서드를 사용할 수 있습니다.
쿼리 :
DataTable tempData = (DataTable)grdUsageRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where isValid(Field<string>("UserName"))// && otherMethod() && otherMethod2()
select r;
DataTable newDT = query.CopyToDataTable();
방법:
bool isValid(string userName)
{
if(userName == "XXXX" || userName == "YYYY")
return false;
else return true;
}
참고 URL : https://stackoverflow.com/questions/679644/multiple-where-clause-in-linq
'Development Tip' 카테고리의 다른 글
간단한 맞춤 이벤트 (0) | 2020.10.28 |
---|---|
동일한 IPython Notebook 셀에서 둘 이상의 차트 만들기 (0) | 2020.10.28 |
jar 파일에는 정확히 무엇이 포함됩니까? (0) | 2020.10.28 |
pyspark에서 Dataframe 열을 String 유형에서 Double 유형으로 변경하는 방법 (0) | 2020.10.28 |
Windows Forms ProgressBar : 선택 윤곽을 시작 / 중지하는 가장 쉬운 방법? (0) | 2020.10.28 |