如何从LINQ语句中分配多个变量
本文关键字:分配 变量 语句 LINQ | 更新日期: 2023-09-27 17:54:02
假设我有一个c#对象变量emp
,它从不同的来源填充。所以,在某一点上,我有一个emp.PersonID
,但没有姓和名。现在,从存储中获取数据的最简单方法是
emp.PersonLastName = from p in _context.Person
where p.PersonID == emp.PersonID
select p.LastName;
emp.PersonFirstName = from p in _context.Person
where p.PersonID == emp.PersonID
select p.FirstName;
...
等。我需要5-10个变量来实现这个目标。显然,每个语句都会导致对单个列的数据库调用,通常看起来很愚蠢。但我想不出一次给多个成员变量赋值的方法。就像
using (emp) {
from p in _context.Person
where p.PersonID == emp.PersonID
select new {
PersonLastName = p.LastName,
PersonFirstName = p.FirstName
...
}
}
(显然,这只是伪代码,解释了我想要完成的内容)
您可以将一体化查询的结果存储在一个临时变量中:
var matchingPerson = (
from p in _context.Person
where p.PersonID == emp.PersonID
select p
).First();
emp.PersonLastName = p.LastName;
emp.PersonFirstName = p.FirstName;
如果你想一次完成所有任务,那是不可能的;然而,如果你不介意它是一个全新的对象,你可以一次创建你的employee对象。
// Assume Employee class
var employee = (
from p in _context.Person
where p.PersonID == emp.PersonID
select new Employee {
emp.PersonID,
PersonFirstName = p.FirstName,
PersonLastName = p.LastName
}
).First();
在没有更好地理解你的类型的情况下,你可以这样做:
var result=_context.Person
.First(p=>p.PersonID==emp.PersonID);
emp.FirstName=result.FirstName;
emp.LastName=result.LastName;
,这将只导致一个数据库调用。如果emp的类型是person,那么你可以这样替换它:
emp=_context.Person
.First(p=>p.PersonID==emp.PersonID);
试试下面的代码。而不是使用匿名的new{…}使用new emp() {..}
emp =
from p in _context.Person
where p.PersonID == emp.PersonID
select new emp() {
PersonLastName = p.LastName,
PersonFirstName = p.FirstName
...
}