Skip to content

Instantly share code, notes, and snippets.

@s2kw
Last active January 4, 2016 11:59
Show Gist options
  • Save s2kw/8618851 to your computer and use it in GitHub Desktop.
Save s2kw/8618851 to your computer and use it in GitHub Desktop.
クエリ式を書いてみた。
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