C# 如何在返回的LINQ中从db表中排除两列?
假设我的员工结构如下表所示C# 如何在返回的LINQ中从db表中排除两列?,c#,entity-framework,linq,C#,Entity Framework,Linq,假设我的员工结构如下表所示 id int fName varchar lname varchar adresss varchar country varchar 假设我已经创建了一个员工列表。在返回该表中所有员工的LINQ语句中,我想排除列地址和国家。如果不在select()中手动写入所需的列,是否有其他方法可以排除这两列,以便执行类似的选择 db.EMployees.Exclude("Address").Exclude("Country").where(x=>x.lname=="mar
id int
fName varchar
lname varchar
adresss varchar
country varchar
假设我已经创建了一个员工列表
。在返回该表中所有员工的LINQ
语句中,我想排除列地址
和国家
。如果不在select()
中手动写入所需的列,是否有其他方法可以排除这两列,以便执行类似的选择
db.EMployees.Exclude("Address").Exclude("Country").where(x=>x.lname=="marcus").Select(d=>d);
不幸的是,除非您投影查询以获得预期结果,否则无法执行此操作:
public class EmployeesDTO
{
public int Id{get;set;}
public string fName {get;set;}
//the rest
}
var query= db.EMployees.Where(x=>x.lname=="marcus")
.Select(d=>new EmployeesDTO{Id=d.Id, fName=d.Name,...});
但更好的方法是使用Automapper使用扩展方法为您进行大选择:
var query= db.EMployees.Where(x=>x.lname=="marcus").ProjectTo<EmployeesDTO>();
var query=db.EMployees.Where(x=>x.lname==“marcus”).ProjectTo();
为什么要排除属性?还有,为什么不想写出这些列?@Vlad274假设您的表有35列,而在返回对象中,我只需要30列。那么,您是排除4列,还是在select块中手动写入30列?我根本不会排除列。一个实体意味着代表一个完整的记录,说“我希望这个被定义为代表一个完整记录的东西只被部分填充”是很奇怪的。@Vlad274假设实体有35个col,但从我的操作中,我需要30EF不是为你想要的东西而设计的。你不是在处理实体,你只是在处理数据。坦白地说,考虑到Intellisense的存在,我不明白为什么只需输入一次就有问题了?谢谢,伙计,我认为有一种快捷方式,就像我必须将列写入助手类一样:)不客气。没错,但至少在最后一个变量中,您可以避免每次需要查阅数据时编写一个包含所有列的select
)