반응형
LINQ의 IN 절
이 질문에는 이미 답변이 있습니다.
- Linq- 엔티티-SQL“IN” 9 번 답변
where in 절을 SQL Server와 비슷한 방법으로 만드는 방법은 무엇입니까?
나는 혼자서 만들었지 만 아무도 이것을 향상시킬 수 있습니까?
public List<State> Wherein(string listofcountrycodes)
{
string[] countrycode = null;
countrycode = listofcountrycodes.Split(',');
List<State> statelist = new List<State>();
for (int i = 0; i < countrycode.Length; i++)
{
_states.AddRange(
from states in _objdatasources.StateList()
where states.CountryCode == countrycode[i].ToString()
select new State
{
StateName = states.StateName
});
}
return _states;
}
이 표현은 당신이 달성하고자하는 것을해야합니다.
dataSource.StateList.Where(s => countryCodes.Contains(s.CountryCode))
이것은 Linq to SQL의 where in 절로 변환됩니다 ...
var myInClause = new string[] {"One", "Two", "Three"};
var results = from x in MyTable
where myInClause.Contains(x.SomeColumn)
select x;
// OR
var results = MyTable.Where(x => myInClause.Contains(x.SomeColumn));
쿼리의 경우 다음과 같이 할 수 있습니다 ...
var results = from states in _objectdatasource.StateList()
where listofcountrycodes.Contains(states.CountryCode)
select new State
{
StateName = states.StateName
};
// OR
var results = _objectdatasource.StateList()
.Where(s => listofcountrycodes.Contains(s.CountryCode))
.Select(s => new State { StateName = s.StateName});
나는 그것을 확장 방법으로 좋아한다.
public static bool In<T>(this T source, params T[] list)
{
return list.Contains(source);
}
이제 전화하십시오 :
var states = _objdatasources.StateList().Where(s => s.In(countrycodes));
개별 값도 전달할 수 있습니다.
var states = tooManyStates.Where(s => s.In("x", "y", "z"));
더 자연스럽고 SQL에 더 가깝습니다.
public List<Requirement> listInquiryLogged()
{
using (DataClassesDataContext dt = new DataClassesDataContext(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
var inq = new int[] {1683,1684,1685,1686,1687,1688,1688,1689,1690,1691,1692,1693};
var result = from Q in dt.Requirements
where inq.Contains(Q.ID)
orderby Q.Description
select Q;
return result.ToList<Requirement>();
}
}
"IN"절은 .Contains () 메소드를 통해 linq에 내장됩니다.
예를 들어, .States가 "NY"또는 "FL"인 모든 People을 가져 오려면 다음을 수행하십시오.
using (DataContext dc = new DataContext("connectionstring"))
{
List<string> states = new List<string>(){"NY", "FL"};
List<Person> list = (from p in dc.GetTable<Person>() where states.Contains(p.State) select p).ToList();
}
from state in _objedatasource.StateList()
where listofcountrycodes.Contains(state.CountryCode)
select state
이것은 조금 다른 생각입니다. 그러나 그것은 당신에게 유용 할 것입니다. linq 기본 쿼리 내부에 하위 쿼리를 사용했습니다.
문제:
Let say we have document table. Schema as follows schema : document(name,version,auther,modifieddate) composite Keys : name,version
So we need to get latest versions of all documents.
soloution
var result = (from t in Context.document
where ((from tt in Context.document where t.Name == tt.Name
orderby tt.Version descending select new {Vesion=tt.Version}).FirstOrDefault()).Vesion.Contains(t.Version)
select t).ToList();
public List<State> GetcountryCodeStates(List<string> countryCodes)
{
List<State> states = new List<State>();
states = (from a in _objdatasources.StateList.AsEnumerable()
where countryCodes.Any(c => c.Contains(a.CountryCode))
select a).ToList();
return states;
}
참고URL : https://stackoverflow.com/questions/959752/where-in-clause-in-linq
반응형
'Programing' 카테고리의 다른 글
렌더링 문제 렌더링 중 예외 발생 : com / android / util / PropertiesMap [duplicate] (0) | 2020.06.15 |
---|---|
Visual Studio Code에서 여러 프로젝트 / 폴더 열기 (0) | 2020.06.14 |
프로그램을 중단하지 않고 파이썬에서 경고 발생 (0) | 2020.06.14 |
iOS 13 전체 화면에서 모달 표시 (0) | 2020.06.14 |
iPhone 시뮬레이터에 .ipa 파일을 설치하는 방법 (0) | 2020.06.14 |