想象一下,我有一个由代码创建的数据库,看起来像这样.
Movie (table)
ID int PK
MoveiName nvarchar(100)
Actor (table)
ID int PK
ActorName nvarchar(100)
Movie_ID int FK
Run Code Online (Sandbox Code Playgroud)
这些是我会使用的模型,显然不完全是这样,但你会明白我的观点.
class Movie
{
int ID{get;set;}
string MovieName {get;set;}
List<Actor> Actors {get;set}
}
class Actor
{
int ID{get;set}
string Actorname{get;set}
Movie Movie{get;set;}
int Move_ID{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
数据库首先使我能够从一个actor查询电影,但也允许我设置actor的forgien键属性来更新数据库.我不能在代码中首先执行此操作,因为外键在模型中不仅仅是对象.我不想获取Movie对象并设置属性,如果我知道我的电影的ID我宁愿只设置外键而没有调用来获取电影.
合理?大声笑
我想使用codefirst和实体迁移,但我想要与数据库相同的能力首先在对象上设置外键.
干杯的帮助:-D
例如,我想尝试这样的事情。排序部分可能没有、1 个或多个按不同顺序排序的列。但我无法使用该ThenBy方法,因为它仅在OrderBy. 下面的代码将不断将顺序重置为排序列表中的最后一项。我也不想更改方法签名。非常感谢您的帮助,谢谢。
public IQueryable<Person> FilterList(string forename, List<Sorting> sorting)
{
IQueryable<Person> query = dc.Set<Person>();
if(!string.IsNullOrEmpty(forename)){
query = query.Where(w=>w.Forename.Contains(forename));
foreach(var sort in sorting)
{
switch(sort.By)
{
case "asc":
switch(sort.Sort)
{
case "forename":
query = query.OrderBy(o=>o.Forename);
break;
case "surname":
query = query.OrderBy(o=>o.Surname);
break;
}
break;
case "desc":
switch(sort.Sort)
{
case "forename":
query = query.OrderByDescending(o=>o.Forename);
break;
case "surname":
query = query.OrderByDescending(o=>o.Surname);
break;
}
break;
}
}
return query;
}
public class Sorting
{
public string Sort{get;set;}
public string By{get;set;} …Run Code Online (Sandbox Code Playgroud) 我想用一个采用泛型类型的抽象方法创建一个抽象类.我的实现类方法将使用该类型执行某些操作,但因为它的通用我无法访问方法中传递的真实对象的属性.如果我尝试进行转换,那么它将无法编译,因为您无法转换为T类型.我的意思的一个例子.
public abstract class TestAbstractClass
{
public abstract void Method<T>(ref IQueryable<T> query);
}
public class TestA:TestAbstractClass
{
// T in this class is an object with a property called Forename
public override void Method<T>(ref IQueryable<T> query)
{
query = query.OrderBy(o=>o.Forename); // unaware of property forename
query = ((IQueryable<Person>)query).OrderBy(o=>o.Forename); // breaks because of casting
}
}
public class TestB:TestAbstractClass
{
// T in this class is an object with a property called HandSize
public override void Method<T>(ref IQueryable<T> query)
{
query …Run Code Online (Sandbox Code Playgroud)