Last active
January 4, 2016 11:59
-
-
Save s2kw/8618851 to your computer and use it in GitHub Desktop.
クエリ式を書いてみた。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Linq; | |
namespace ConsoleApplication | |
{ | |
class Program{ | |
public enum Job{ | |
knight,magician,axman,archer,witch,swordman, | |
} | |
static void Main (string[] args) { | |
var persons = new []{ | |
new {name = "a", Job = Job.archer, HP = 1, Luck = 1.3, like = "cherry" }, | |
new {name = "a", Job = Job.magician, HP = 2, Luck = 1.2, like = "banana" }, | |
new {name = "b", Job = Job.knight, HP = 3, Luck = 1.1, like = "lemon" }, | |
new {name = "b", Job = Job.axman, HP = 1, Luck = 1.3, like = "peach" }, | |
new {name = "c", Job = Job.magician, HP = 2, Luck = 1.2, like = "orange" }, | |
new {name = "c", Job = Job.witch, HP = 3, Luck = 1.1, like = "orange" }, | |
new {name = "a", Job = Job.witch, HP = 2, Luck = 1.6, like = "apple" }, | |
new {name = "e", Job = Job.magician, HP = 5, Luck = 1.1, like = "lemon" }, | |
new {name = "d", Job = Job.archer, HP = 8, Luck = 1.3, like = "pine" }, | |
}; | |
var items = new []{ | |
new {name = "banana", heal = 20}, | |
new {name = "apple", heal = 32}, | |
new {name = "cherry", heal = 53}, | |
new {name = "peach", heal = 25}, | |
new {name = "pine", heal = 89}, | |
new {name = "orange", heal = 57}, | |
new {name = "lemon", heal = 11}, | |
}; | |
// origin | |
Console.WriteLine ("origin:"); | |
foreach (var a in persons) { | |
Console.WriteLine (a); | |
} | |
// sort | |
Console.WriteLine ("\nname,Job,HP:"); | |
var nameJobHP = from x in persons | |
orderby x.name ,x.Job,x.HP | |
select x; | |
foreach (var a in nameJobHP) { | |
Console.WriteLine (a); | |
} | |
Console.WriteLine ("\nJob Luck HP:"); | |
var JobLickHP = from x in persons | |
orderby x.Job,x.Luck,x.HP descending | |
select x; | |
foreach (var a in JobLickHP) { | |
Console.WriteLine (a); | |
} | |
// group by | |
Console.WriteLine ("\n group by HP"); | |
var groupByHP = from x in persons | |
group x by x.HP | |
// into grouped | |
// where grouped.Key >= 3 // filter | |
// select grouped; | |
; | |
foreach (var a in groupByHP) { | |
Console.WriteLine ("HP:"+a.Key +" persons are.."); | |
foreach (var b in a) { | |
Console.WriteLine ("\t"+b); | |
} | |
} | |
// create new object | |
Console.WriteLine ("\nif person like item, HP will..:"); | |
var allpattern = | |
from man in persons | |
from item in items | |
let newName = man.name +"(" + man.Job.ToString() +")" + " with " + item.name | |
let newHP = man.like == item.name ? man.HP + item.heal * man.Luck : man.HP + item.heal | |
select new {name = newName,HealedHP = newHP} | |
; | |
foreach (var a in allpattern) { | |
Console.WriteLine (a); | |
} | |
// wereで書く | |
Console.WriteLine ("\nlist up liked == item.name:where"); | |
var likePattern = | |
from man in persons | |
from item in items | |
where man.like == item.name | |
let newName = man.name +"(" + man.Job.ToString() +")" + " with " + item.name | |
let newHP = man.HP + item.heal * man.Luck | |
select new {name = newName,HealedHP = newHP} | |
; | |
foreach (var a in likePattern) { | |
Console.WriteLine (a); | |
} | |
// joinで書く | |
Console.WriteLine ("\nlist up by only liked item:join"); | |
var writeByJoin = | |
from man in persons | |
join item in items on man.like equals item.name | |
let newName = man.name +"(" + man.Job.ToString() +")" + " with " + item.name | |
let newHP = man.HP + item.heal * man.Luck | |
select new {name = newName,HealedHP = newHP} | |
; | |
foreach (var a in writeByJoin) { | |
Console.WriteLine (a); | |
} | |
// join intoで書く | |
Console.WriteLine ("\nwho like fruite?:join into"); | |
var fruiteLike = | |
from item in items | |
join man in persons on item.name equals man.like into ps | |
select new {name = item.name,persons = ps.Select( y => y.name + "(" + y.Job.ToString() + ")" )} | |
; | |
foreach (var a in fruiteLike) { | |
string p = ""; | |
foreach (string name in a.persons) { | |
p += name + ",\t"; | |
} | |
Console.WriteLine (string.Format("name:\t{0}\tliked:{1}",a.name,p)); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment