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

时间:2016-07-02 23:17:28

标签: c# asp.net entity-framework linq

假设我有一个从不同来源填充的C#对象变量CreateDXGIFactory。所以,在某些时候我有一个emp,但没有名/姓。现在,从存储中获取数据的最简单方法是

emp.PersonID

等。我有大约5-10个变量,我需要这样做。显然,每个语句都会导致单个列的数据库调用,并且通常看起来很愚蠢。但我想不出一种方法可以一次性分配多个成员变量。像

这样的东西
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;
        ...

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

3 个答案:

答案 0 :(得分:1)

如果没有更好地了解您的类型,您可以这样做:

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);

答案 1 :(得分:1)

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

var matchingPerson = (
    from p in _context.Person
    where  p.PersonID == emp.PersonID 
    select p
).First();

emp.PersonLastName = p.LastName;
emp.PersonFirstName = p.FirstName;

如果你正在寻找一种方法来一次性完成所有作业,你就不能;但是,如果你不介意它是一个全新的对象,你可以能够一次性创建你的员工对象。

// 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();

答案 2 :(得分:-1)

请尝试以下代码。而不是使用匿名新{...}使用新的emp(){..}

import numpy as np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from pandas import DataFrame

m = Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80)
m.drawcoastlines()
m.drawstates()

lon = np.array([-95,  -94,  -93,  -92, -91])
lat = np.array([43, 42, 41])
data = np.array([[0,4,8,3],[7,3,0,0]])
# you have to write just like here to convert coordinates
x,y = m(lon,lat)

my_cmap = plt.get_cmap('rainbow')
my_cmap.set_under('white')
cs = m.pcolormesh(x,y,data,cmap = my_cmap)
m.colorbar(cs, extend = 'min')
plt.show()