나는 이상하고 특이한 방식으로 필터링하려고하는 LINQ 결과 세트가 있습니다.문자열 목록에서 하위 문자열을 선택/필터링하는 방법은 무엇입니까?
List<string> MyDomains = [Code to get list];
var x = (from a in dc.Activities
where a.Referrer != null
&& a.Referrer.Trim().Length > 0
&& !a.Referrer.Contains("localhost")
&& a.SearchResults.Count() == 0
orderby a.ID descending
select a)
.Take(20);
이제는 설명이 잘못되었습니다. 더 잘 설명해 드리겠습니다. MyDomains는 문자열 목록입니다. 각각은 내가 소유 한 루트 도메인입니다.
a.Referrer는 GET에서 내 웹 사이트 중 하나에 대한 리퍼러가 포함 된 문자열입니다. 이 문자열에는 하위 도메인, 폴더, 파일 및 쿼리 문자열이 포함됩니다.
MyDomains 목록에있는 a.Referrer의 루트 도메인으로 x를 필터링하려고합니다. 즉,이 방식으로 일치하지 않는 모든 레코드를 반환하고 싶습니다. 결과 집합은 추천자가 내 도메인이 아닌 활동을 포함하게됩니다.
나는 람다 표현식을 배웠지 만, 지금까지 논리를 가진 where 절 (사실상 루프, 하위 문자열 등)이 필요하기 때문에 지금까지이 목표를 달성 할 수 없었습니다.
현재 X를 목록에 캐스팅하고 수동으로 필터링 한 다음 X를 바인딩하는 대신 대상 컨트롤에 바인딩합니다. 확장 방법이있어 Uri의 루트 도메인을 가져오고 그것이 내 도메인이든 아니든, "SQL로 지원되는 변환이 없으므로"여기에 람다를 넣을 수는 없습니다.
구조적 차이 이외에도 LINQ 쿼리에서이 문제를 어떻게 해결할 수 있습니까?
참고 : 내 .Take (20)가 추가되기 전에 일치하는 레코드를 제거 할 수 있도록 쿼리 내에서이 작업을 수행하려고합니다. 나는 더 많은 데이터베이스를 호출 할 필요없이 매번 같은 수의 결과를 얻고 싶습니다. 내가 이해하면
아니요, foreach의 각 반복은 그것을 보충하는 대신 이전의 것보다 우선합니다. 따라서 목록에있는 마지막 항목으로 계산됩니다. +1 좋은 생각을위한 tho. – tsilb
내가 제안한 대체 솔루션이 맞습니까? – Konamiman