如何从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
               ...
   }
}

(显然,这只是伪代码,解释了我想要完成的内容)

如何从LINQ语句中分配多个变量

您可以将一体化查询的结果存储在一个临时变量中:

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
               ...
   }