C# 通过EF从表中选择时,我可以为输出指定新属性吗?
我保证所有这些例子都会引出一些连贯的观点,请随意浏览,这是基本的东西,直到最后(甚至可能到那时): 我可以从该表中进行如下选择:C# 通过EF从表中选择时,我可以为输出指定新属性吗?,c#,linq,entity-framework,C#,Linq,Entity Framework,我保证所有这些例子都会引出一些连贯的观点,请随意浏览,这是基本的东西,直到最后(甚至可能到那时): 我可以从该表中进行如下选择: var samples = from sample in myDb.Samples select new //anonymoys type { Id = sample.Id, Name = sample.Name }; 或 但是,如果我想选择DbSet模型的属性(/表中的列)并添加一些自定义数据,例如
var samples =
from sample in myDb.Samples
select new //anonymoys type
{
Id = sample.Id,
Name = sample.Name
};
或
但是,如果我想选择DbSet模型的属性(/表中的列)并添加一些自定义数据,例如:
var samples =
from sample in myDb.Samples
select new
{
Id = sample.Id,
Name = sample.Name
TableName = 'Samples'
};
我已经尝试了上面的代码,它工作了,但是,我以后无法编辑“TableName”-收到一个错误,说明它是只读的。然后,我创建了一个新模型“SampleViewModel”,并为其提供了一个TableName属性,但这产生了以下异常:
EntityFramework.SqlServer.dll中发生了类型为“System.NotSupportedException”的首次意外异常
希望这是清楚的,并解释了我在标题中的要求。如果有人好奇的话,实际上我正在做的是创建一个包含5个表的联合(.concat in EF),并试图避免在表中放入冗余信息,例如表名。我可能遗漏了一些明显的东西 匿名类具有只读属性。顺便说一句,用初始化的属性投射到可编辑的匿名类型是不容易的 然而,您应该能够投射到您定义的自定义类型中,但是,请记住,这样做可以说“切断了您的连接”:从那以后,您就不再是SQL land中的一员了,它都在内存中。如果从那里开始执行任何
条件,则将在客户端执行,这意味着所有候选人都将被拉到客户端。也就是说,要做到这一点,你需要做如下的事情:
var samples =
from sample in myDb.Samples
select new CustomClass
{
Id = sample.Id,
Name = sample.Name
TableName = "Samples"
};
public class CustomClass
{
public string Id { get; set; }
public string Name { get; set; }
public string TableName { get; set; }
}
其中CustomClass
如下所示:
var samples =
from sample in myDb.Samples
select new CustomClass
{
Id = sample.Id,
Name = sample.Name
TableName = "Samples"
};
public class CustomClass
{
public string Id { get; set; }
public string Name { get; set; }
public string TableName { get; set; }
}