csharp: Linq keyword example
/// <summary>
/// http://www.dotnetperls.com/linq
/// </summary>
public partial class LinqForm : Form
{ const int _max = 1000000;
/// <summary>
/// Linq keyword
/// </summary>
public enum CheckLinq
{
Distinct,
Union,
Intersect,
Except,
Var,
Loop,
New,
Orderby,
Group,
Join,
Let,
Where,
ToDictionary,
Lambda,
GroupJoin,
GroupBy
}
/// <summary>
///
/// </summary>
/// <returns></returns>
DataTable setcom()
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Rows.Add(1, "Distinct");
dt.Rows.Add(2, "Union");
dt.Rows.Add(3, "Intersect");
dt.Rows.Add(4, "Except");
dt.Rows.Add(5, "Var");
dt.Rows.Add(6, "Loop");
dt.Rows.Add(7, "New");
dt.Rows.Add(8, "Orderby");
dt.Rows.Add(9, "Group");
dt.Rows.Add(10, "Join");
dt.Rows.Add(11, "Let");
dt.Rows.Add(12, "Where");
dt.Rows.Add(13, "ToDictionary");
dt.Rows.Add(14, "Lambda");
dt.Rows.Add(15, "GroupJoin");
dt.Rows.Add(16, "GroupBy"); return dt;
} /// <summary>
///
/// </summary>
public LinqForm()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LinqForm_Load(object sender, EventArgs e)
{
this.comboBox1.DataSource = setcom();
this.comboBox1.ValueMember = "id";
this.comboBox1.DisplayMember = "name"; } /// <summary>
///
/// </summary>
public string TestSetSemantics(CheckLinq check)
{
List<string> lstColumn = new List<string>();
List<string> strDistinct = new List<string>();
List<string> strUnion = new List<string>();
List<string> strExcept = new List<string>();
List<string> strIntersect = new List<string>();
List<string> strVar = new List<string>();
List<string> strLoop = new List<string>();
List<string> strNew = new List<string>();
List<string> strOrderby = new List<string>();
List<string> strGroup = new List<string>();
List<string> strJoin = new List<string>();
List<string> strLet = new List<string>();
List<string> strWhere = new List<string>();
List<string> strToDictionary = new List<string>();
List<string> strLambda = new List<string>();
List<string> strGroupJoin = new List<string>();
List<string> strGroupBy = new List<string>(); string str = string.Empty; string[] dailySecurityLog = {
"Bob logged in",
"Bob logged out",
"Bob logged in",
"Bill logged in",
"Melissa logged in",
"Bob logged out",
"Bill logged out",
"Bill logged in",
"Tim logged in",
"Scott logged in",
"Scott logged out",
"Dave logged in",
"Tim logged out",
"Bob logged in",
"Dave logged out"}; Employee[] project1 = {
new Employee(){ Name = "Bob" },
new Employee(){ Name = "Bill" },
new Employee(){ Name = "Melissa" },
new Employee(){ Name = "Shawn" } };
Employee[] project2 = {
new Employee(){ Name = "Shawn" },
new Employee(){ Name = "Tim" },
new Employee(){ Name = "Scott" } };
Employee[] project3 = {
new Employee(){ Name = "Bob" },
new Employee(){ Name = "Dave" },
new Employee(){ Name = "Tim" },
new Employee(){ Name = "Shawn" } };
IEnumerable<string> whoLoggedIn =
dailySecurityLog.Where(logEntry => logEntry.Contains("logged in")).Distinct();
var allProjectEmployees = project1.Union(project2.Union(project3)); switch (check)
{
case CheckLinq.Distinct:
// Distinct
//"Everyone who logged in today:";
foreach (string who in whoLoggedIn)
{
strDistinct.Add(who);
}
str=String.Join(",",strDistinct.ToArray()); //结果:Bob logged in,Bill logged in,Melissa logged in,Tim logged in,Scott logged in,Dave logged in
break;
case CheckLinq.Union:
// Union
//"Employees for all projects:";
foreach (Employee employee in allProjectEmployees)
{
strUnion.Add(employee.Name); }
str = String.Join(",",strUnion.ToArray()); //结果:Bob,Bill,Melissa,Shawn,Tim,Scott,Dave
break;
case CheckLinq.Intersect:
// Intersect
//"Employees on every project:"; var everyProjectEmployees = project1.Intersect(project2.Intersect(project3));
foreach (Employee employee in everyProjectEmployees)
{
strIntersect.Add(employee.Name);
}
str = String.Join(",",strIntersect.ToArray()); //结果:Shawn
break;
case CheckLinq.Except: // Except
var intersect1_3 = project1.Intersect(project3);
var intersect1_2 = project1.Intersect(project2);
var intersect2_3 = project2.Intersect(project3);
var unionIntersect = intersect1_2.Union(intersect1_3).Union(intersect2_3); //"Employees on only one project:";
var onlyProjectEmployees = allProjectEmployees.Except(unionIntersect);
foreach (Employee employee in onlyProjectEmployees)
{
strExcept.Add(employee.Name);
}
str = String.Join(",",strExcept.ToArray()); //结果:Bill,Melissa,Scott,Dave
break;
case CheckLinq.Var:
int[] array = { 1, 2, 3, 6, 7, 8 };
// Query expression.
var elements = from element in array
orderby element descending
where element > 2
select element;
// Enumerate.
foreach (var element in elements)
{
strVar.Add(element.ToString());
}
str = String.Join(",", strVar.ToArray());
break;
case CheckLinq.Loop:
int[] values = { 10, 0, 1, 1, 20, 300, 400, 4 };
// Version 1: use LINQ.
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
int count = CountLinq(values);
}
s1.Stop(); // Version 2: use for-loop.
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
int count = CountFor(values);
}
s2.Stop();
strLoop.Add(((double)(s1.Elapsed.TotalMilliseconds * 1000000) /
_max).ToString("0.00 ns"));
strLoop.Add(((double)(s2.Elapsed.TotalMilliseconds * 1000000) /
_max).ToString("0.00 ns"));
str = String.Join(",", strLoop.ToArray());
break;
case CheckLinq.New:
string[] newarray = { "one", "two", "three", "four", "", "seven" };
// Use Select New.
var result = from newelement in newarray
select new { Value = newelement, Id = Id(newelement) }; foreach (var anonymous in result)
{
string value = anonymous.Value;
int id = anonymous.Id;
strNew.Add(anonymous.ToString());
}
str = String.Join(",", strNew.ToArray());
break;
case CheckLinq.Orderby:
// Input array.
int[] orderarray = { 2, 5, 3 };
// Use orderby, orderby ascending, and orderby descending.
var result0 = from orderelement in orderarray
orderby orderelement
select orderelement; var result1 = from orderelement in orderarray
orderby orderelement ascending
select orderelement; var result2 = from orderelement in orderarray
orderby orderelement descending
select orderelement;
// Print results.
strOrderby.Add("result0:");
foreach (var orderelement in result0)
{
strOrderby.Add(orderelement.ToString());
}
strOrderby.Add("result1:");
foreach (var orderelement in result1)
{
strOrderby.Add(orderelement.ToString());
}
strOrderby.Add("result2:");
foreach (var orderelement in result2)
{
strOrderby.Add(orderelement.ToString());
}
str = String.Join(",", strOrderby.ToArray());
break;
case CheckLinq.Group:
// Input array.
int[] grouparray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // Group elements by IsEven.
var groupresult = from groupelement in grouparray
orderby groupelement
group groupelement by IsEven(groupelement); // Loop over groups.
foreach (var group in groupresult)
{
// Display key and its values.
strGroup.Add(group.Key.ToString());
foreach (var value in group)
{
strGroup.Add(value.ToString());
}
}
str = String.Join(",", strGroup.ToArray());
break;
case CheckLinq.Join:
// Example customers.
var customers = new Customer[]
{
new Customer{ID = 5, Name = "Sam"},
new Customer{ID = 6, Name = "Dave"},
new Customer{ID = 7, Name = "Julia"},
new Customer{ID = 8, Name = "Sue"}
}; // Example orders.
var orders = new Order[]
{
new Order{ID = 5, Product = "Book"},
new Order{ID = 6, Product = "Game"},
new Order{ID = 7, Product = "Computer"},
new Order{ID = 8, Product = "Shirt"}
}; // Join on the ID properties.
var query = from c in customers
join o in orders on c.ID equals o.ID
select new { c.Name, o.Product }; // Display joined groups.
foreach (var group in query)
{
strJoin.Add(string.Format("{0} bought {1}", group.Name, group.Product));
}
str = String.Join(",", strJoin.ToArray());
break;
case CheckLinq.Let:
int[] letarray = { 0, 1, 2 };
// Build IEnumerable of Analyze arguments and its return values.
var letresult = from letelement in letarray
let v = Analyze(letelement)
let x = Analyze(v)
select new { v, x };
// This prints argument, return value pairs.
foreach (var letelement in letresult)
{
strLet.Add(letelement.ToString());
}
str = String.Join(",", strLet.ToArray()); break;
case CheckLinq.Where:
//
// Example array that contains unwanted null and empty strings.
//
string[] wherearray = { "dot", "", "net", null, null, "perls", null };
//
// Use Where method to remove null strings.
//
strWhere.Add("Begins output from first loop:");
var whreresult1 = wherearray.Where(item => item != null);
foreach (string value in whreresult1)
{
strWhere.Add(value);
}
//
// Use Where method to remove null and empty strings.
//
strWhere.Add("Begins output from second loop:");
var whrereresult2 = wherearray.Where(item => !string.IsNullOrEmpty(item));
foreach (string value in whrereresult2)
{
strWhere.Add(value);
}
str = String.Join(",", strWhere.ToArray()); break;
case CheckLinq.ToDictionary:
// Example with strings and List.
List<string> list = new List<string>()
{
"cat",
"dog",
"animal"
};
var animals = list.ToDictionary(x => x, x => true);
if (animals.ContainsKey("dog"))
{
// This is in the Dictionary.
strToDictionary.Add("dog exists");
}
str = String.Join(",", strToDictionary.ToArray());//结果:dog exists
break;
case CheckLinq.Lambda:
List<int> lamelements = new List<int>() { 10, 20, 31, 40 };
// ... Find index of first odd element.
int oddIndex = lamelements.FindIndex(x => x % 2 != 0); //
strLambda.Add(oddIndex.ToString());
str = String.Join(",", strLambda.ToArray());//结果:31 index: 2
break;
case CheckLinq.GroupJoin:
// Example customers.
var gcustomers = new Customer[]
{
new Customer{Code = 5, Name = "Sam"},
new Customer{Code = 6, Name = "Dave"},
new Customer{Code = 7, Name = "Julia"},
new Customer{Code = 8, Name = "Sue"}
}; // Example orders.
var gorders = new Order[]
{
new Order{KeyCode = 5, Product = "Book"},
new Order{KeyCode = 6, Product = "Game"},
new Order{KeyCode = 7, Product = "Computer"},
new Order{KeyCode = 7, Product = "Mouse"},
new Order{KeyCode = 8, Product = "Shirt"},
new Order{KeyCode = 5, Product = "Underwear"}
}; // Correlate "customers" with "orders"
// ... Use Code property as key for Customer.
// ... Use KeyCode property as key for Order.
// ... For each result, create object with Name and IEnumerable of orders.
var gquery = gcustomers.GroupJoin(gorders,
c => c.Code,
o => o.KeyCode,
(c, gresult) => new Result(c.Name, gresult)); // Enumerate results.
foreach (var gresult in gquery)
{
string gj = string.Empty;
List<string> gp = new List<string>();
gj=string.Format("{0} bought...", gresult.Name);
foreach (var item in gresult.Collection)
{
gp.Add(item.Product);
}
gj = gj + String.Join(",",gp.ToArray());
strGroupJoin.Add(gj);
gj = "";
}
str = String.Join(";", strGroupJoin.ToArray()); //结果:Sam bought...Book,Underwear;Dave bought...Game;Julia bought...Computer,Mouse;Sue bought...Shirt
break;
case CheckLinq.GroupBy:
// Input array.
int[] gyarray = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Group elements by IsEven.
var gyresult = gyarray.GroupBy(a => IsEven(a));
// Loop over groups.
foreach (var group in gyresult)
{
string gb = string.Empty;
// Display key for group.
gb=string.Format("IsEven = {0}:", group.Key); List<string> gbv = new List<string>();
// Display values in group.
foreach (var value in group)
{
gbv.Add(string.Format("{0} ", value));
}
gb =gb+ String.Join(",", gbv.ToArray());
// End line.
strGroupBy.Add(gb);
gb = "";
}
str = String.Join(";", strGroupBy.ToArray()); //结果:IsEven = False:1 ,3 ,5 ,7 ,9 ;IsEven = True:2 ,4 ,6 ,8
break;
default:
str = "";
break; }
return str; }
/// <summary>
///
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
int CountLinq(int[] values)
{
// Count values greater than or equal to 10 with LINQ.
return (from x in values
where x >= 10
select x).Count();
}
/// <summary>
///
/// </summary>
/// <param name="values"></param>
/// <returns></returns>
int CountFor(int[] values)
{
// Count values greater than or equal to 10 with a loop.
int count = 0;
for (int i = 0; i < values.Length; i++)
{
if (values[i] >= 10)
{
count++;
}
}
return count;
} int _value;
/// <summary>
///
/// </summary>
/// <param name="element"></param>
/// <returns></returns>
int Id(string element)
{
// Get Id.
return string.IsNullOrEmpty(element) ?
0 :
_value++;
}
/// <summary>
/// 奇数偶数
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
bool IsEven(int value)
{
return value % 2 == 0;
}
/// <summary>
///
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
int Analyze(int value)
{
// Return a value for each argument.
switch (value)
{
case 0:
return 1;
case 1:
return 2;
case 2:
default:
return 3;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
int c = (int)this.comboBox1.SelectedValue;
switch (c)
{
case 1:
this.textBox1.Text = TestSetSemantics(CheckLinq.Distinct);
break;
case 2:
this.textBox1.Text = TestSetSemantics(CheckLinq.Union);
break;
case 3:
this.textBox1.Text = TestSetSemantics(CheckLinq.Intersect);
break;
case 4:
this.textBox1.Text = TestSetSemantics(CheckLinq.Except);
break;
case 5:
this.textBox1.Text = TestSetSemantics(CheckLinq.Var);
break;
case 6:
this.textBox1.Text = TestSetSemantics(CheckLinq.Loop);
break;
case 7:
this.textBox1.Text = TestSetSemantics(CheckLinq.New);
break;
case 8:
this.textBox1.Text = TestSetSemantics(CheckLinq.Orderby);
break;
case 9:
this.textBox1.Text = TestSetSemantics(CheckLinq.Group);
break;
case 10:
this.textBox1.Text = TestSetSemantics(CheckLinq.Join);
break;
case 11:
this.textBox1.Text = TestSetSemantics(CheckLinq.Let);
break;
case 12:
this.textBox1.Text = TestSetSemantics(CheckLinq.Where);
break;
case 13:
this.textBox1.Text = TestSetSemantics(CheckLinq.ToDictionary);
break;
case 14:
this.textBox1.Text = TestSetSemantics(CheckLinq.Lambda);
break;
case 15:
this.textBox1.Text = TestSetSemantics(CheckLinq.GroupJoin);
break;
case 16:
this.textBox1.Text = TestSetSemantics(CheckLinq.GroupBy);
break;
default:
this.textBox1.Text = "";
break;
}
}
} class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public int Code { get; set; }
} class Order
{
public int ID { get; set; }
public string Product { get; set; }
public int KeyCode { get; set; }
} class Result
{
public string Name { get; set; }
public IEnumerable<Order> Collection { get; set; }
public Result(string name, IEnumerable<Order> collection)
{
this.Name = name;
this.Collection = collection;
}
} /// <summary>
///
/// </summary>
public class Employee
{
/// <summary>
///
/// </summary>
public string Name { get; set; }
/// <summary>
///
/// </summary>
/// <returns></returns>
public override string ToString()
{
return this.Name;
}
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
return this.GetHashCode().Equals(obj.GetHashCode());
}
/// <summary>
///
/// </summary>
/// <returns></returns>
public override int GetHashCode()
{
return this.Name.GetHashCode();
}
}
csharp: Linq keyword example的更多相关文章
- LINQ 常规实践总结
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续两次OrderBy,后面一个有可能会打乱前面一个的排序顺序,可能与预期不符. 要实现sql中的order by word,nam ...
- 再次理解 C# LINQ
语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 查询表达式(生成表达式) 1.IEnumerable<T> 查询编译为委托.如 source.Where( ...
- LINQ解析
Linq 是什么? Linq是Language Integrated Query的缩写,即“语言集成查询“的意思,Linq的提出就是为了提供一种跨各种数据源统一查询方式,主要包含四种组件:Linq t ...
- Linq的左链接
地址:https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-left-outer-joins ①创建两张表和一些基础数据做我们的测试 ...
- Linq Introduce
Linq学习网址: http://www.java2s.com/Code/CSharp/LINQ/CatalogLINQ.htm
- C#基础提升系列——C# LINQ
C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类En ...
- Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果
例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称 db.Products .Join ( db.Categories, p => p.CategoryID, c => ...
- 【Unity】工具类系列教程—— 代码自动化生成!
转载自:https://zhuanlan.zhihu.com/p/30716595?utm_medium=social&utm_source=qq [为什么要做自动化工具] 工具类的创建是为了 ...
- Prism+MaterialDesign+EntityFramework Core+Postgresql WPF开发总结 之 基础篇
本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要争对C#初学者,巩固C#常用知识点: 中级篇主要争对WPF布局与美化, ...
随机推荐
- RHEL安装oracle客户端(版本为11.2)
RHEL安装oracle客户端(版本为 11.2) 1.获取超级管理员 命令:su - 输入root密码 2.安装依赖包: 命令:yum install -y binutils compat-libs ...
- 版本控制(.git + .svn)
git 分布式版本控制系统 底层C语言 按元数据方式存储,采用SHA-1哈希算法(内容完整性好) 结合GitHub,为开源项目免费提供Git存储 git config --global user.na ...
- php解析word,获得文档中的图片
背景 前段时间在写一个功能:用原生php将获得word中的内容并导入到网站系统中.因为文档中存在公式,图片,表格等,因此写的比较麻烦. 思路 大体思路是先将word中格式为doc的文档转化为docx, ...
- 网络请求及各类错误代码含义总结(包含AFN错误码大全)
碰见一个很奇葩的问题, 某些手机在设置了不知什么后, 某些 APP 死活 HTTPS 请求失败, 例如以 UMeng 统计HTTP 请求失败为例, Log如下: UMLOG: (Error App ...
- Struts2 漏洞系列之S2-001分析
0x00 前言 最近在学习java的相关漏洞,所以Struts2的漏洞自然是绕不开的.为了更好的理解漏洞原理,计划把Struts2所有的漏洞自己都做一个复现.并且自己去实现相关的POC.相关的环境 ...
- <VS2017> 编写VC++单元测试 -(一)新建单元测试工程
开发人员自己编写单元测试是一个非常好的习惯.单元测试不但能够验证自己所编写的代码是否存在问题,避免提交给测试人员时才发现bug,也可以为将来改动代码的人提供验证代码功能正确性的途径.在我有限的工作生涯 ...
- Java并发编程——阻塞队列BlockingQueue
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
- Qt Creator中使用qss对界面美化没有作用(效果)的问题
最近在研究qt界面开发,发现使用qss对界面进行美化后效果不错,要比mfc效率高很多,美化效果也很出色.但是在使用qss文件对界面控件进行美化的过程中遇到了个很奇葩的问题,困惑了我好久,今晚又遇到了, ...
- 18.async函数
1.含义 async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generator 函数,依次读取两个文件. var fs = require('fs'); var ...
- call()和apply()方法(切换上下文)
call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. apply方法: 语法:apply ...