List 和实体框架 6 linq 查询的属性访问器
本文关键字:查询 linq 属性 访问 框架 实体 List | 更新日期: 2023-09-27 17:57:17
是否可以
让 (EF6) Linq select 语句实例化类,以便使用 Linq 语句返回的值触发属性的set
访问器?
我已经尝试了与下面的代码(类似),但是尽管查询返回数据,但set
的value
是一个空列表。我假设 Linq 创建了 MyModel 的新实例,然后从记录集中添加记录。
是否可以在 MyList 完全填充后触发doSomething()
,但从 MyModel 范围内触发(即在 context.SomeEntities.Select(...)
之后不添加后续调用)?
public class MyModel{
private List<string> _myList;
public List<string> MyList {
get { return _myList; }
set { _myList = value; doSomething(); }
}
private void doSomething() {...}
}
..
context.SomeEntities.Select(x => new MyModel { MyList = x.YourList });
这两个问题的答案都是"是"。以下内容对我有用:
class Program
{
static void Main(string[] args)
{
Context context = new Context();
List<MyModel> myModelsList = context.Products.Include("Names").AsEnumerable().Select(x =>
{
MyModel model = new MyModel();
model.MyList = x.Names.Select(pn => pn.Name).ToList();
return model;
}).ToList();
}
static void CreateAndSeedDatabase()
{
Context context = new Context();
Product product1 = new Product() { Names = new List<ProductName> { new ProductName { Name = "1" } } };
Product product2 = new Product() { Names = new List<ProductName> { new ProductName { Name = "2" } } };
context.Products.Add(product1);
context.Products.Add(product2);
context.SaveChanges();
}
}
public class Context : DbContext
{
public Context()
{
Database.SetInitializer<Context>(new CreateDatabaseIfNotExists<Context>());
Database.Initialize(true);
}
public DbSet<Product> Products { get; set; }
public DbSet<ProductName> ProductNames { get; set; }
}
public class Product
{
public int ProductId { get; set; }
public List<ProductName> Names { get; set; }
}
public class ProductName
{
public int ProductNameId { get; set; }
public string Name { get; set; }
}
public class MyModel
{
private List<string> _myList;
public List<string> MyList
{
get { return _myList; }
set { _myList = value; doSomething(); }
}
private void doSomething()
{
Console.WriteLine(_myList[0]);
}
}
}