返回EF方法语法中单个对象的选定属性
本文关键字:属性 对象 单个 EF 方法 语法 返回 | 更新日期: 2023-09-27 18:16:58
//This works, but seems incorrect to me
Object selection = db.ExampleTable
.Where(s => s.Id == id)
.Select(s => new { s.Id, s.PropIWantToShow })
.SingleOrDefault();
//This seems correct, but does not work
Object selection = db.ExampleTable
.SingleOrDefault(s => s.Id == id)
.Select(s => new { s.Id, s.PropIWantToShow });
db
是我们的实体框架数据上下文。
我的目标是选择与ExampleTable中提供的id匹配的单个条目。如果没有找到条目,则返回null。但是,EF似乎不允许我选择单个对象,然后只返回特定的属性。我如何做到这一点,或者我提供的第一个例子是否正确?
我检查了这个问题:选择实体ef linq:
的属性不幸的是,你不能有条件地加载相关实体的属性——你要么加载整个门实体,要么不包括那个实体。
但是答案似乎不正确,但显然"似乎"是一个非常弱的陈述。
你的第一个方法是正确的:
//This works, but seems incorrect to me
Object selection = db.ExampleTable
.Where(s => s.Id == id)
.Select(s => new { s.Id, s.PropIWantToShow })
.SingleOrDefault();
你的第二个方法得到了一个对象,而不是LINQ可以处理的IQueryable<T>
对象。如果你想从一种类型的对象转换到另一种类型,那不是LINQ的事情。仍然可以,但会更复杂。例如:
var selection =...;
var newselection=new { Id=selection.Id, PropIWantToShow=selection.PropIWantToShow };
,但这是非常糟糕的,因为您确实从DB检索了整个对象,然后丢弃了其中的大部分。第一个方法只从DB返回2个字段。
如果你想让你的函数返回null,如果条件不匹配,那么使用FirstorDefault()
而不是SingleorDefalut()
。如果你想匹配一个id并返回一个对象那么这样做:
return db.ExampleTable.FirstorDefault(c=>c.Id == id);