在Entity Framework中查找或创建对象

5

我的领域模型及其关联如下:

  • 客户 拥有多个 地区
  • 地区 拥有多个 位置

我们的客户向我们提供了一个 CSV 文件,其中包含以下列:

  • 客户名称
  • 地区名称
  • 位置名称
    • 纬度
    • 经度
    • ...

基于这些信息,我必须通过名称查找或创建客户,查找或创建地区,最后再查找或更新位置。

我尝试了以下方法:

var customer = from c in _data.Customer
               where c.Name == cells[0]
               select c;

if (customer == null)
    customer = new Customer(...);

我会遵循相同的模式来查找或创建/更新区域和位置,但是遇到的问题是,在customer = new customers();行上,无法将LINQ查询的类型转换为Customer-object。我需要稍后引用此 customer 对象,因此不能有两个单独的变量。
在Entity Framework中,我该如何实现这一点?
2个回答

5
这段代码
var customer = from c in _data.Customer
               where c.Name == cells[0]
               select c;

返回所有Name等于cells [0]的客户,因此返回类型将是IQueryable<Customer>而不是单个Customer(这就是为什么customer = new Customer(...)无法工作)。

如果您想要一个Customer,则需要在其上调用FirstOrDefaultSingleOrDefault(取决于您的要求)。

因此,这应该可以工作。

var customer = (from c in _data.Customer
               where c.Name == cells[0]
               select c).SingleOrDefault();

2

试试这个

var customer = (from c in _data.Customer
               where c.Name == cells[0]
               select c).FirstOrDefault();

if (customer == null)
    customer = new Customer(...);

如果您需要确保最多只返回一条记录,则应使用SingleOrDefault而不是FirstOrDefault。 - TGH
谢谢您的迅速回复!这也解决了问题! :-) - Laurens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接