Func یا Expression Func در EF
نویسنده: وحید نصیری
تاریخ: ۱۳۹۲/۰۴/۲۶ ۸:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Linq.Expressions;
namespace Sample
{
public abstract class BaseEntity
{
public int Id { set; get; }
}
public class Receipt : BaseEntity
{
public int TotalPrice { set; get; }
}
public class MyContext : DbContext
{
public DbSet<Receipt> Receipts { get; set; }
}
public class Configuration : DbMigrationsConfiguration<MyContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(MyContext context)
{
if (!context.Receipts.Any())
{
for (int i = 0; i < 20; i++)
{
context.Receipts.Add(new Receipt { TotalPrice = i });
}
}
base.Seed(context);
}
}
public static class EFUtils
{
public static IList<T> LoadEntities<T>(this DbContext ctx, Expression<Func<T, bool>> predicate) where T : class
{
return ctx.Set<T>().Where(predicate).ToList();
}
public static IList<T> LoadData<T>(this DbContext ctx, Func<T, bool> predicate) where T : class
{
return ctx.Set<T>().Where(predicate).ToList();
}
}
public static class Test
{
public static void RunTests()
{
startDB();
using (var context = new MyContext())
{
var list1 = context.LoadEntities<Receipt>(x => x.TotalPrice == 10);
var list2 = context.LoadData<Receipt>(x => x.TotalPrice == 20);
}
}
private static void startDB()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>());
// Forces initialization of database on model changes.
using (var context = new MyContext())
{
context.Database.Initialize(force: true);
}
}
}
}SELECT [Extent1].[Id] AS [Id], [Extent1].[TotalPrice] AS [TotalPrice] FROM [dbo].[Receipts] AS [Extent1] WHERE 10 = [Extent1].[TotalPrice]
SELECT [Extent1].[Id] AS [Id], [Extent1].[TotalPrice] AS [TotalPrice] FROM [dbo].[Receipts] AS [Extent1]
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate); public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public virtual TEntity Find(Func<TEntity, bool> predicate)
{
return _tEntities.Where(predicate).FirstOrDefault();
}public virtual TEntity Find(Expression<Func<TEntity, bool>> predicate)
public virtual TEntity Find(Expression<Predicate<TEntity>> predicate)