C\#LINQ 조회 표현 식 의 기본 자구 요약 사용 하기
LINQ 의 데이터 원본 은 데이터베이스 대상 이나 XML 흐름 등 일 수도 있 고 IEnumerable 또는 범용 IEnumberable
LINQ 의 기본 문법 은 다음 과 같은 8 개의 문맥 키 워드 를 포함 하고 있 습 니 다.이러한 키워드 와 구체 적 인 설명 은 다음 과 같 습 니 다.
키워드
설명 하 다.
from
지정 한 범위 변수 와 데이터 원본
where
bool 표현 식 에 따라 데이터 원본 에서 데 이 터 를 선별 합 니 다.
select
검색 결과 에 있 는 요소 가 가지 고 있 는 유형 이나 표현 형식 을 지정 합 니 다.
group
검색 결 과 를 키 값 으로 묶 기(IGrouping
into
join,group 또는 select 자구 결과 에 대한 참조 역할 을 할 수 있 는 식별 자 를 제공 합 니 다.
orderby
검색 한 요 소 를 정렬 합 니 다(ascending/descending)
join
두 개의 지 정 된 일치 조건 에 따라 Equals 는 두 개의 데이터 원본 을 연결 합 니 다.
let
검색 표현 식 의 하위 표현 식 검색 결 과 를 저장 하 는 범위 변 수 를 만 듭 니 다.
다음은 이 8 개의 키 워드 를 정리 하 는 데 자주 사용 되 는 검색 어 쓰기 입 니 다.
1.from 자구
LINQ 표현 식 을 쓰 려 면 from 자구 로 시작 해 야 합 니 다.개인 적 으로 from 자구 에서 주의해 야 할 부분 은 여러 from 자구 의 쓰기 라 고 생각 합 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace LINQ
{
/// <summary>
/// LINQ, from
/// </summary>
class Program
{
static void Main(string[] args)
{
//1 form
string[] values = { "LINQ ","LINQ ","from "," from "};
var value = from v in values
where v.IndexOf("LINQ") > -1
select new { v, v.Length };
foreach (var n in value)
{
Console.WriteLine("{0},{1}",n.v,n.Length );
}
Console.ReadKey(false);
//2 LINQ ArrayList
ArrayList gList = new ArrayList();
gList.Add(new GustInfo { Name="DebugLZQ", Age=26, Tel="88888888"});
gList.Add(new GustInfo { Name=" ",Age=6, Tel ="666666"});
gList.Add(new GustInfo { Name = "M&MSoft", Age =9, Tel = "55555" });
var query = from GustInfo gust in gList
where gust.Age > 9
select gust;// gust
foreach (GustInfo g in query)
{
Console.WriteLine("{0} :{1} :{2}",g.Name,g.Age,g.Tel );
}
Console.ReadKey(false);
//3 from
List<GustInfo2> gList2 = new List<GustInfo2>()
{
new GustInfo2{ Name="DebugLZQ",Age=26,TelTable=new List<string>(){"8888888","138******"}},
new GustInfo2{ Name=" ",Age=6,TelTable =new List<string>(){"666666","138******"}},
new GustInfo2{ Name="M&MSoft",Age=9,TelTable=new List<string>(){"55555","138******"}}
};
//gust、tel , !!!
var query2 = from gust in gList2
from tel in gust.TelTable
where tel.IndexOf("5555") > -1
select gust;
foreach (var g in query2)
{
Console.WriteLine("{0} {1}",g.Name,g.Age );
foreach (var t in g.TelTable)
{
Console.WriteLine(" :{0}",t);
}
}
Console.ReadKey(false);
//4 from
var query3 = from GustInfo gust in gList
where gust.Age > 6
from GustInfo2 gust2 in gList2
where gust2.Age> 9
select new { gust, gust2 };//
foreach (var g in query3)
{
Console.WriteLine("{0} {1}", g.gust.Name, g.gust2.Name);
}
Console.ReadKey(false);
}
}
}
프로그램의 실행 결 과 는 다음 과 같다.프로그램 에서 from 자구 의 용법 예 시 를 열거 하 였 으 며,복합 from 자구 와 여러 from 자구 의 작성 에 주의 하 는 동시에 범위 변수 와 데이터 소스 변수 라 는 두 개념 을 이해 해 야 한다.
2.where 자구
where 자 구 는 LINQ 표현 식 의 요소 선별 메커니즘 입 니 다.시작 과 끝 을 제외 하고 LINQ 표현 식 의 임 의 위치 에 거의 나타 날 수 있 습 니 다.
LINQ 표현 식 에 where 자구 가 있 을 수도 있 고 없 을 수도 있 습 니 다.하나 가 있 을 수도 있 고 여러 개가 있 을 수도 있다.여러 where 자구 간 의 논리 적 관 계 는 논리 적'과'에 해당 합 니 다.각 where 자 구 는 1 개 이상 의 bool 논리 표현 식 을 포함 할 수 있 습 니 다.이러한 조건 은 서술 어 가 되 고 서술 어 논리 간 에는 SQL 의 and,or 가 아 닌'&'|'등 을 사용 합 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_WHERE
{
/// <summary>
/// LINQ where
/// </summary>
class Program
{
static void Main(string[] args)
{
//1 where
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ", Age=26,Tel="88888888"},
new GustInfo(){ Name="cnblogs",Age=6,Tel="666666"},
new GustInfo(){ Name="M&MSoft",Age=9,Tel="55555"}
};
var query = from gust in gList
where (gust.Name.Length > 7 || gust.Name.Substring(0, 1) == "M") && gust.Age > 9
select new { gust.Name, gust.Age };
foreach (var g in query)
{
Console.WriteLine("{0},{1}", g.Name, g.Age);
}
Console.ReadKey(false);
//2. where
var query2 = from GustInfo gust in gList
where gust.Name.Length > 5
&& Check(gust.Name)
select gust;
foreach (var g in query2)
{
Console.WriteLine("{0},{1},{2}", g.Name, g.Age, g.Tel);
}
Console.ReadKey(false);
//3.
// ,
string[] names = { "SB","XXX","***","@@@"," "};
var query3 = from GustInfo guest in gList
where !names.Contains(guest.Name)
select guest;
foreach (var q in query3)
{
Console.WriteLine("{0} :{1}, :{2}",q.Name,q.Age,q.Tel );
}
Console.ReadKey(false);
}
//
static bool Check(string name)
{
if (name.Substring(0, 1) == "N")
return false;
return true;
}
}
}
자주 사용 하 는 where 자구 의 작법 에 주의해 야 한다.프로그램의 실행 결 과 는 다음 과 같다.3.Select 자구
selection 자구 에서 조 회 된 요 소 를 매우 유연 하 게 처리 한 후에 결 과 를 되 돌려 줍 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_select
{
/// <summary>
/// LINQ select
/// select , ,
/// </summary>
class MyGustInfo
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ", Age=25, Tel="88888888"},
new GustInfo(){ Name="cnblogs", Age=6, Tel="666666"},
new GustInfo(){ Name="M&M", Age=9, Tel="55555"}
};
var query = from gust in gList
where gust.Age >= 9 && gust.Age <= 30
select gust.Name.Replace("&", "mm");//select
var query2 = from gust in gList
where gust.Age >= 9 && gust.Age <= 30
select MyProc(gust.Name);
var query3 = from gust in gList
where gust.Age >= 9 && gust.Age <= 30
select new { gust.Name,gust.Age};
var query4 = from gust in gList
where gust.Age >= 9 && gust.Age <= 30
select new MyGustInfo { Name=gust.Name+"My", Age=gust.Age+1};//
foreach (var v in query)
{
Console.WriteLine(v);
}
foreach (var v in query2)
{
Console.WriteLine(v);
}
foreach (var v in query3)
{
Console.WriteLine(v.Name+v.Age );
}
foreach (var v in query4)
{
Console.WriteLine(v.Name+v.Age );
}
Console.ReadKey(false);
}
static string MyProc(string s)
{
return s + "Better";
}
}
}
프로그램의 실행 결 과 는 다음 과 같다.4.group 자구
문법 에 따 르 면 LINQ 표현 식 은 from 자구 로 시작 하여 select 또는 group 자구 로 끝나 야 하기 때문에 select 를 사용 하여 결 과 를 되 돌려 주 는 것 외 에 group 자 구 를 사용 하여 요소 가 조 성 된 결 과 를 되 돌려 줄 수도 있 습 니 다.
group 자 구 는 IGrouping
문법 과 SQL 의 group 은 약간 다 르 기 때문에 주의 하지 않 으 면 잘못 쓸 수 있 습 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_group
{
/// <summary>
/// LINQ group
/// </summary>
class Program
{
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
var query = from guest in gList
group guest by guest.Name.Substring(0, 1);// key string
//
foreach (IGrouping<string, GustInfo> guestGroup in query)
{
Console.WriteLine(" :{0}",guestGroup.Key );
foreach (var g in guestGroup)
{
Console.WriteLine("{0} :{1} :{2}",g.Name,g.Age,g.Tel );
}
}
Console.ReadKey(false);
Console.WriteLine("-----------------------------------");
var query2 = from guest in gList
group guest by guest.Age > 20;// key bool
foreach (IGrouping<bool, GustInfo> guestGroup in query2)
{
Console.WriteLine(" 20 :{0}", guestGroup.Key);
foreach (var g in guestGroup)
{
Console.WriteLine("{0} :{1} :{2}", g.Name, g.Age, g.Tel);
}
}
Console.ReadKey(false);
}
}
}
프로그램의 실행 결 과 는 다음 과 같다.5.into 자구
into 자 구 는 임시 식별 자로 서 group,select,join 자구 에서 그 결과 의 인용 을 충당 합 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_into
{
/// <summary>
/// LINQ group
/// </summary>
class Program
{
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
//1.into group
var query = from guest in gList
group guest by guest.Name.Substring(0, 1) into grguest
orderby grguest.Key descending
select grguest;
var query2 = from guest in gList
group guest by guest.Name.Substring(0, 1) into grguest
orderby grguest.Key ascending
select grguest;
//2.select into
var query3 = from guest in gList
select new { NewName = guest.Name, NewAge = guest.Age } into newguest
orderby newguest.NewAge
select newguest;
foreach (var guestGroup in query)
{
Console.WriteLine(" :{0}",guestGroup.Key );
foreach (var g in guestGroup)
{
Console.WriteLine("{0} :{1}",g.Name,g.Tel );
}
}
Console.ReadKey(false);
foreach (var newg in query3)
{
Console.WriteLine("{0} :{1}",newg.NewName,newg.NewAge );
}
Console.ReadKey(false);
}
}
}
프로그램 실행 결 과 는 다음 과 같 습 니 다.6.orderby 자구,thenby 자구
LINQ 는 요소 의 하나 또는 여러 속성 에 따라 요 소 를 정렬 할 수 있 습 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_orderby
{
class Program
{
/// <summary>
/// LINQ orderby (ascending descending)
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
//
var query = from guest in gList
orderby guest.Age
select guest;
var query1 = from guest in gList
orderby guest.Age ascending
select guest;
var query2 = from guest in gList
orderby guest.Age descending
select guest;
// ,
var query3 = from guest in gList
orderby guest.Age, guest.Name.Length
select guest;
var query4 = from guest in gList
orderby guest.Age descending , guest.Name.Length ascending
select guest;
var query5 = from guest in gList
orderby guest.Age, guest.Name.Length,guest.Tel
select guest;
foreach (var guest in query2)
{
Console.WriteLine("{0} :{1} :{2}",guest.Name,guest.Age,guest.Tel );
}
Console.ReadKey(false);
foreach (var guest in query4)
{
Console.WriteLine("{0} :{1} :{2}", guest.Name, guest.Age, guest.Tel);
}
Console.ReadKey(false);
}
}
}
프로그램 실행 결 과 는 다음 과 같 습 니 다.7.let 자구
let 자 구 는 LINQ 표현 식 에 하위 표현 식 의 계산 결 과 를 저장 하 는 데 사 용 됩 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_let
{
/// <summary>
/// LINQ let
/// </summary>
class Program
{
static void Main(string[] args)
{
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
// let g, g
var query = from guest in gList
let g = guest.Name.Substring(0, 1)
where g == "D" || g == "J"
select guest;
// let,
var query2 = from guest in gList
where guest.Name.Substring(0, 1) == "D" || guest.Name.Substring(0, 1) == "J"
select guest;
foreach (var g in query)
{
Console.WriteLine("{0} :{1} :{2}",g.Name,g.Age,g.Tel );
}
Console.ReadKey(false);
Console.WriteLine(" let, ");
foreach (var g in query2)
{
Console.WriteLine("{0} :{1} :{2}", g.Name, g.Age, g.Tel);
}
Console.ReadKey(false);
}
}
}
프로그램의 실행 결 과 는 다음 과 같다.8.join 자구
만약 에 하나의 데이터 소스 에서 요소 의 특정한 속성 이 다른 데이터 소스 의 특정한 속성 과 똑 같이 비교 할 수 있다 면 이 두 데이터 소스 는 join 자구 로 연결 할 수 있다.
join 자 구 는 equals 키 워드 를 사용 하여 같은 비 교 를 합 니 다.자주 사용 하 는 이등 호 가 아 닙 니 다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LINQ_join
{
class Program
{
static void Main(string[] args)
{
//
List<GustInfo> gList = new List<GustInfo>()
{
new GustInfo(){ Name="DebugLZQ",Age=26,Tel="187********"},
new GustInfo(){ Name="Sarah",Age=25,Tel="159********"},
new GustInfo(){ Name="Jerry",Age=35,Tel="135********"},
new GustInfo(){ Name="M&M",Age=16,Tel="136********"},
new GustInfo(){ Name="DebugMan",Age=26,Tel="136********"},
new GustInfo(){ Name="Jerry&Tom",Age=19,Tel="136********"},
};
List<GuestTitle> titleList = new List<GuestTitle>()
{
new GuestTitle(){Name="DebugLZQ",Title="Soft Engineer"},
new GuestTitle(){Name="DebugLZQ",Title="Team Leader"},
new GuestTitle(){Name="Sarah",Title="Test Engineer"},
new GuestTitle(){Name="Jerry",Title="Head Master"}
};
//1.
var query = from guest in gList
join title in titleList on guest.Name equals title.Name
select new { Name=guest.Name ,Title=title.Title,Age=guest.Age };
foreach (var g in query)
{
Console.WriteLine("{0} {1} :{2}",g.Name,g.Title ,g.Age );
}
Console.ReadKey(false);
// from : :
var query2=from guest in gList
from title in titleList
where guest.Name==title.Name
select new { Name = guest.Name, Title = title.Title, Age = guest.Age };
foreach (var g in query2)
{
Console.WriteLine("{0} {1} :{2}", g.Name, g.Title, g.Age);
}
Console.ReadKey(false);
//2.
// ,
var query3 = from guest in gList
join title in titleList on guest.Name equals title.Name into tgroup
select new { Name=guest.Name,Titles=tgroup };
foreach (var g in query3)
{
Console.WriteLine(g.Name);
foreach (var g2 in g.Titles)
{
Console.WriteLine(" {0}",g2.Title );
}
}
Console.ReadKey(false);
//3.
//
var query4 = from guest in gList
join title in titleList on guest.Name equals title.Name into tgroup
from subtitle in tgroup.DefaultIfEmpty()
select new { Name=guest.Name,Title=subtitle==null?" ":subtitle.Title };
foreach (var g in query4)
{
Console.WriteLine("{0} {1} ",g.Name ,g.Title );
}
Console.ReadKey(false);
}
}
}
프로그램 결 과 는 다음 과 같 습 니 다.이상 은 LINQ 의 기본 자구 의 상용 용법 으로 문자 가 많 지 않 습 니 다.코드 에 상세 한 주석 설명 이 있 기 때 문 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel 데이터를 LINQ에서 검색이 문서에서는 을 통해 LINQ를 사용하여 Excel 테이블에 액세스하는 방법을 설명합니다. 이렇게 하려면 Entity Framework에 LINQ를 사용합니다. 이렇게 하면 연결을 만들고 모든 CData ADO.N...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.