کوئری هایی با قابلیت استفاده ی مجدد
نویسنده: شاهین کیاست
تاریخ: ۱۳۹۱/۰۸/۱۸ ۲۰:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
namespace ReUsableQueries.Model
{
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
[ForeignKey("BornInCityId")]
public virtual City BornInCity { get; set; }
public int BornInCityId { get; set; }
}
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
}
using System.Data.Entity;
using ReUsableQueries.Model;
namespace ReUsableQueries.DAL
{
public class MyContext : DbContext
{
public DbSet<City> Cities { get; set; }
public DbSet<Student> Students { get; set; }
}
}
public class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(MyContext context)
{
var city1 = new City { Name = "city-1" };
var city2 = new City { Name = "city-2" };
context.Cities.Add(city1);
context.Cities.Add(city2);
var student1 = new Student() {Name = "Shaahin",LastName = "Kiassat",Age=22,BornInCity = city1};
var student2 = new Student() { Name = "Mehdi", LastName = "Farzad", Age = 31, BornInCity = city1 };
var student3 = new Student() { Name = "James", LastName = "Hetfield", Age = 49, BornInCity = city2 };
context.Students.Add(student1);
context.Students.Add(student2);
context.Students.Add(student3);
base.Seed(context);
}
}
var context = new MyContext();
var query= context.Students.Where(x => x.Name.Contains(name)).Where(x => x.LastName.Contains(lastName)).Where(
x => x.Age == age);
var query= context.Students.Where(x => x.Name.Contains(name)).Where(x => x.LastName.Contains(lastName)).Where(
x => x.Age == age).OrderBy(x=>x.LastName).Skip(skip).Take(take);
var query = context.Students.Where(x => x.Name.Contains(name)).Where(x => x.LastName.Contains(lastName)).Where
(
x => x.Age == age).Where(x => x.BornInCityId == 1).OrderBy(x => x.Age);
namespace ReUsableQueries.Quries
{
public static class StudentQueryExtension
{
public static IQueryable<Student> FindStudentsByName(this IQueryable<Student> students,string name)
{
return students.Where(x => x.Name.Contains(name));
}
public static IQueryable<Student> FindStudentsByLastName(this IQueryable<Student> students, string lastName)
{
return students.Where(x => x.LastName.Contains(lastName));
}
public static IQueryable<Student> SkipAndTake(this IQueryable<Student> students, int skip , int take)
{
return students.Skip(skip).Take(take);
}
public static IQueryable<Student> OrderByAge(this IQueryable<Student> students)
{
return students.OrderBy(x=>x.Age);
}
}
}
var query = context.Students.FindStudentsByName(name).FindStudentsByLastName(lastName).SkipAndTake(skip,take);
var query = context.Students.AsQueryable();
if (searchByName)
{
query= query.FindStudentsByName(name);
}
if (orderByAge)
{
query = query.OrderByAge();
}
if (paging)
{
query = query.SkipAndTake(skip, take);
}
return query.ToList();
IQueryable<Entity>
public IEnumerable<dynamic> GetCustomColumnsDynamic(Func<Student, dynamic> pColumns)
{
return _entities.Select(pColumns).ToList();
}
var resultDynamic = _serviceStudent.GetCustomColumnsDynamic
(
x=> new { x.Id, x.LastName, x.Age }
);
MessageBox.Show(resultDynamic.LastName);
var query = context.Students.FindStudentsByName(name).FindStudentsByLastName(lastName).SkipAndTake(skip,take);
var query = context.Students.AsQueryable().FindStudentsByName(name).FindStudentsByLastName(lastName).SkipAndTake(skip,take);