Model层的类如下:
复制代码1
2
3
4
5
6
7
public class Order
{
public int Id { get; set; }
public decimal Amount { get; set; }
public string CustomerName { get; set; }
public string Status { get; set; }
}
登录后复制
复制代码1
2
3
4
5
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
登录后复制
Program.cs代码如下:
复制代码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class Program
{
//AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。
//线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程,通过调用 Set 发出资源可用的信号。
//调用 Set 向 AutoResetEvent 发信号以释放等待线程。AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。
//可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 的初始状态,如果初始状态为终止状态,则为 true;否则为 false。
//通俗的来讲只有等myResetEven.Set()成功运行后,myResetEven.WaitOne()才能够获得运行机会;Set是发信号,WaitOne是等待信号,只有发了信号,等待的才会执行。如果不发的话,WaitOne后面的程序就永远不会执行。
private static AutoResetEvent autoSet = new AutoResetEvent(false);
private static List<Person> list = new List<Person>()
{
new Person() {Name = "Rose", Age = 19},
new Person() {Name = "Steve", Age = 45},
new Person() {Name = "Jessica", Age = 20},
};
private static void Main(string[] args)
{
//CheckOrders();
//Common();
//RemoveFromList();
//ExceptionHandling();
//-----------------------------------------------------------------
//--------------------------------模拟非线程安全----------------------------
Thread t1 = new Thread(() =>
{
//确保等待t2开始之后才运行下面的代码
autoSet.WaitOne();
foreach (var item in list)
{
Console.WriteLine("t1:" + item.Name);
Thread.Sleep(1000);
}
});
t1.Start();
Thread t2 = new Thread(() =>
{
//通知t1可以执行代码
autoSet.Set();
//沉睡1秒是为了确保删除操作在t1的迭代过程中
Thread.Sleep(1000);
list.RemoveAt(2);
});
t2.Start();
Console.ReadKey();
}
public static void CheckOrders()
{
List<Order> orders = new List<Order>()
{
new Order { Id = 123, Amount = 29.95m, CustomerName = "Mark", Status = "Delivered" },
new Order { Id = 456, Amount = 45.00m, CustomerName = "Steph", Status = "Refunded" },
new Order { Id = 768, Amount = 32.50m, CustomerName = "Claire", Status = "Delivered" },
};
bool anyRefunded = orders.Any(o => o.Status == "Refunded");
if (anyRefunded)
{
Console.WriteLine("There are refunded orders");
}
else
{
Console.WriteLine("No refunds");
}
bool allDelivered = orders.All(o => o.Status == "Delivered");
if (allDelivered)
{
Console.WriteLine("Everything was delivered");
}
else
{
Console.WriteLine("Not everything was delivered");
}
}
public static void Common()
{
//距离圣诞节的天数
var daysToChristmas = (new DateTime(DateTime.Today.Year, 12, 25) - DateTime.Today).TotalDays;
Console.WriteLine(daysToChristmas);
//-----------------------------------------------------------------
int SUM = "10,5,0,8,10,1,4,0,10,1"
.Split(',')
.Select(int.Parse)
.OrderBy(n => n)
.Skip(3)
.Sum();
Console.WriteLine(SUM);
//-----------------------------------------------------------------
var customers = new[] {
new { Name = "Annie", Email = "annie@test.com" },
new { Name = "Ben", Email = "" },
new { Name = "Lily", Email = "lily@test.com" },
new { Name = "Joel", Email = "joel@test.com" },
new { Name = "Sam", Email = "" },
};
foreach (var customer in
from c in customers
where !String.IsNullOrEmpty(c.Email)
select c)
{
Console.WriteLine("Sending email to {0}", customer.Name);
}
//效果同上
foreach (var customer in customers.Where(c => !String.IsNullOrEmpty(c.Email)))
{
Console.WriteLine("Sending email to {0}", customer.Name);
}
}
public static void RemoveFromList()
{
Func<List<string>> makeList = () => Enumerable.Range(1, 10000000).Select(n => ("Item " + n + "")).ToList();
var itemsToRemove = new[] { "Item 0", "Item 1", "Item 50", "Item 1000", "Item 999999", "Item 9999999" };
var stopwatch = new Stopwatch();
var list = makeList();
stopwatch.Start();
foreach (var item in itemsToRemove)
{
list.Remove(item);
}
stopwatch.Stop();
Console.WriteLine(list.Count + "Foreach took {0}ms", stopwatch.ElapsedMilliseconds);
list = makeList();
stopwatch.Restart();
var newList = list.Except(itemsToRemove).ToList(); //效率极低
stopwatch.Stop();
Console.WriteLine(newList.Count + "Except took {0}ms", stopwatch.ElapsedMilliseconds);
}
public static void ExceptionHandling()
{
var numbers = Enumerable.Range(1, 10)
.Select(n => 5 - n)
.Select(n =>
{
try
{
return 10 / n;
}
catch (Exception e)
{
Console.WriteLine("Error in lambda: " + e.Message);
return -1;
}
});
foreach (var n in numbers)
{
Console.WriteLine(n);
}
}
}
登录后复制
以上就是分享一些高效的LINQ语句代码的详细内容,更多请关注靠谱客其它相关文章!
最后
以上就是酷酷母鸡最近收集整理的关于分享一些高效的LINQ语句代码的全部内容,更多相关分享一些高效内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复