Linq中的where主要用于对数据源的筛选。where可以有一个或者多个。
一、创建控制台应用程序:DemoWhere_1
二、添加自定义类:PersonInfo.cs
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/// <summary>
/// 人物类
/// </summary>
public class PersonInfo
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 国家
/// </summary>
public string Country { get; set; }
/// <summary>
/// 职位
/// </summary>
public string Official { get; set; }
/// <summary>
/// 薪水
/// </summary>
public int Salary { get; set; }
/// <summary>
/// 是否为魏国
/// </summary>
/// <param name="country"></param>
/// <returns></returns>
public bool IsWei(string country)
{
if (country == "魏")
return true;
else
return false;
}
}
1.Linq中的 与(&&)或(||)非(!=) 查询
Program.cs中的代码:
class Program
{
static void Main(string[] args)
{
// 填充数据
List<PersonInfo> pList = new List<PersonInfo>()
{
new PersonInfo(){ Name="刘备", Country="蜀", Official="皇帝", Salary=10000},
new PersonInfo{ Name="关羽", Country="蜀", Official="上将", Salary=10000},
new PersonInfo{ Name="张飞", Country="蜀", Official="上将", Salary=10000},
new PersonInfo{ Name="曹操", Country="魏", Official="皇帝", Salary=10000},
new PersonInfo{ Name="典韦", Country="魏", Official="上将", Salary=8000},
new PersonInfo{ Name="许褚", Country="魏", Official="上将", Salary=8000},
new PersonInfo{ Name="孙权", Country="吴", Official="皇帝", Salary=10000},
new PersonInfo{ Name="周瑜", Country="吴", Official="都督", Salary=8000},
new PersonInfo{ Name="陆逊", Country="吴", Official="都督", Salary=8000}
};
// Linq 与(&&)或(||)非(!=) 查询
var query = from PersonInfo v in pList
where v.Salary > 9000 && (v.Official == "皇帝" || v.Country == "吴") && v.Country!="蜀"
select v;
foreach (PersonInfo p in query)
{
Console.WriteLine(string.Format("姓名{0}---国家{1}---职位:{2}---薪水{3}" , p.Name,p.Country,p.Official,p.Salary));
}
Console.ReadKey();
}
}
运行结果:
2.在where子句中,使用自定义函数
在Program.cs中添加如下代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 在where子句中使用自定义函数查询
Console.WriteLine("*******************自定义函数查询*******************");
var query_1 = from v in pList
where new PersonInfo().IsWei(v.Country)
select v;
foreach (PersonInfo p in query_1)
{
Console.WriteLine(string.Format("姓名{0}---国家{1}---职位:{2}---薪水{3}", p.Name, p.Country, p.Official, p.Salary));
}
Console.ReadKey();
运行结果:
3.where子句中的动态谓词的筛选:
在Program.cs中添加:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
// 使用where子句的动态谓语的筛选
// pList数据中的人物名字必须包含在names中
string[] names = { "关羽", "典韦", "周瑜", "诸葛亮" };
Console.WriteLine("*******************使用where子句的动态谓语的筛选*******************");
var query_2 = from v in pList
where names.Contains(v.Name)
select v;
foreach (PersonInfo p in query_2)
{
Console.WriteLine(string.Format("姓名{0}---国家{1}---职位:{2}---薪水{3}", p.Name, p.Country, p.Official, p.Salary));
}
Console.ReadKey();
运行结果: