Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在返回的LINQ中从db表中排除两列?_C#_Entity Framework_Linq - Fatal编程技术网

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