LINQ (C#)
을 사용하여 datatable
의 특정 행에 대한 특정 열의 값을 어떻게 선택합니까? 해당 SQL
은 다음과 같습니다.Linq : 데이터 테이블 열의 값 선택
select NAME from TABLE where ID = 0
미리 감사드립니다. 행이 고유 경우
LINQ (C#)
을 사용하여 datatable
의 특정 행에 대한 특정 열의 값을 어떻게 선택합니까? 해당 SQL
은 다음과 같습니다.Linq : 데이터 테이블 열의 값 선택
select NAME from TABLE where ID = 0
미리 감사드립니다. 행이 고유 경우
var name = from r in MyTable
where r.ID == 0
select r.Name;
당신도 바로 할 수있는 :
var row = DataContext.MyTable.SingleOrDefault(r => r.ID == 0);
var name = row != null ? row.Name : String.Empty;
var x = from row in table
where row.ID == 0
select row
은 행에 대해 알고 DataTable을, 현명한 다른 사용자가 행을 사용해야합니다을 가정하면 색인 :
where row[rowNumber] == 0
이 경우 선택을 사용하여 행 데이터를 익명의 클래스 또는 준비된 클래스에 배치 할 수도 있습니다. 의 나는 다른 사람들이 그래서 그냥 내가 람다 구문 동등한 놓을 게요이 완료 가지고 비 람다 구문을 준 알
(다른 방법으로 전달하려는 경우) : (
비 람다) 제임스의 게시물 당 :
var name = from i in DataContext.MyTable
where i.ID == 0
select i.Name
등가 람다 구문 : 정말 많은 실제적인 차이, 당신이 선호하는 단지 개인적인 의견이 아니라
var name = DataContext.MyTable.Where(i => i.ID == 0)
.Select(i => new { Name = i.Name });
.
당신의 람다 대답이 표시된 것보다 정확하다고 생각합니다. SingleOrDefault()는 행의 모든 열을 가져옵니다 (OP가 요청한 것이 아니며 OP는 한 열에 만 요청 됨). Where() 및 Select() 조합은 모든 열을 반입하는 것보다 필요한 열을 반입합니다. 내가 잘못하면 Plz 날 정정 해. – gsk
네 말이 맞아. 마지막에 ".SingleOrDefault()"를 할 수도 있습니다 (예 :'string name = DataContext.MyTable.Where (i => i.ID == 0) .Select (i => i.Name) .SingleOrDefault();'1 열만 다시 쿼리합니다). SingleOrDefault에 대해 본질적으로 "fetch-all"은 없습니다. 쿼리를 체인화해야합니다. 그렇지만 성능 열의 오버 헤드는 일반적으로 다른 열에 매우 큰 데이터가 없으면 무시할 수 있습니다. – fyjham
답장을 보내 주셔서 감사합니다. "MyTable"개체의 유형을 (귀하의 답변에서) 이해하지 못했으며 다음 코드는 아래에 표시된 오류를 알려줍니다.
DataTable dt = ds.Tables[0];
var name = from r in dt
where r.ID == 0
select r.Name;
를 찾을 수 없습니다 그래서 난 내 인터넷 검색을 계속 작업을 수행 뭔가 발견는 소스 유형 'System.Data.DataTable'에 대한 쿼리 패턴의 구현을 찾을 수 없습니다. '어디'
var rowColl = ds.Tables[0].AsEnumerable();
string name = (from r in rowColl
where r.Field<int>("ID") == 0
select r.Field<string>("NAME")).First<string>();
당신은 어떻게 생각하세요?
'.AsEnumerable'을 사용하려면 dll 'System.Data.DataSetExtensions'및 using 문을 추가해야합니다! – KennyZ
위의 수정 된 주석 : '.AsEnumerable'을 사용하려면 'System.Data.DataSetExtensions'이라는 dll을 추가해야합니다! 그것을 위해 using 문을 사용하지 마십시오! System.Data를 사용하고 .dll에 대한 참조를 사용하면이 작업을 수행 할 수 있습니다. – KennyZ
AsEnumerable은 질의의 컨텍스트를 전환하여'where/select'가 DB 측이 아니라 메모리에서 수행되도록합니다. – James
var name = from DataRow dr in tblClassCode.Rows where (long)dr["ID"] == Convert.ToInt32(i) select (int)dr["Name"]).FirstOrDefault().ToString()
linq를 사용하고 데이터 테이블을 Enumerable로 설정하고 데이터 테이블 필드에서 찾고자하는 것과 일치하는 필드를 선택하십시오.
예 내가 통화가 현지 통화 통화 테이블에서 통화 아이디 및 통화 이름을 얻고, 폼에 텍스트 상자에 통화 ID와 이름을 할당 할
:
DataTable dt = curData.loadCurrency();
var curId = from c in dt.AsEnumerable()
where c.Field<bool>("LocalCurrency") == true
select c.Field<int>("CURID");
foreach (int cid in curId)
{
txtCURID.Text = cid.ToString();
}
var curName = from c in dt.AsEnumerable()
where c.Field<bool>("LocalCurrency") == true
select c.Field<string>("CurName");
foreach (string cName in curName)
{
txtCurrency.Text = cName.ToString();
}
반환 값은 문자열이며, 당신이 사용할 수있는 당신은 ID를 기준으로 정보를 검색해야하는 경우 :
string name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name")).ToString();
또는 GE를 사용하여 Neric 변수 :
var name = datatable.AsEnumerable().Where(row => Convert.ToInt32(row["Id"]) == Id).Select(row => row.Field<string>("name"));
문자열 이름 = datatable.AsEnumerable(). 여기서 (행 => Convert.ToInt32 (행 [ "Id"]) == Id) .Select (행 => 행. 필드
사실상 SingleOrDefault 호출을 호출하면 문자 그대로 SQL로 번역 된 모든 열이 실제로 선택됩니다 (IQueryable이 아닌 MyTable 객체를 반환 함). select 메소드가 수행 할 수없는 성능 영향을 줄 수있는 테이블에있는 항목에 따라 다 (니다. 전형적인 테이블에서 가독성은 아마도 작은 성능 차이의 가치가있을 것입니다. 그러나 질문은 동등한 SQL에 관한 것이므로 명확히 할만한 가치가 있다고 생각했습니다. – fyjham
SingleOrDefault는 집합에서 고유 항목을 검색 할 때 가장 적절하게 사용됩니다. OP의 그것 소리에 의해 어느 쪽. – James
이 작업은 SingleOrDefault와 동일하게 작동합니다. 감사합니다 – ianbeks