使用Entity Framework取得结果
使用Entity Framework取得结果
我试图查询一个数据库集,但是当我获得结果时,似乎无法访问数据。下面是我尝试的代码。\n查询 #1:\n
public Listtesting() { var context = new CustomerEntities(); var query = context.CustomerMains .Where(p=> p.FirstName == "Thor") .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName}).ToList(); return query; }
\n查询 #2:\n
public IQueryabletesting() { var context = new CustomerEntities(); var query = context.CustomerMains .Where(p=> p.FirstName == "Thor") .Select(p => new CustomerMain {FirstName=p.FirstName,LastName =p.LastName}); return query; }
\n`CustomerMain` 是我的 `DbSet`,如果我运行其中任何一个并将方法赋值给 `var` 变量,它不会给我任何选项来从变量中获取 `FirstName` 或 `LastName`。我发现如果将其转换为 `CustomerMain`,我可以这样做,但是返回的查询应该已经是 `CustomerMain` 类型的吧?
问题出现的原因是因为方法返回的是一个集合或查询对象,而不是单个实体。需要使用迭代或选择记录的方式来获取FirstName或LastName。
解决方法之一是使用foreach循环来迭代集合中的每个元素,然后访问customer.FirstName属性。
解决方法之二是使用FirstOrDefault方法来选择符合条件的第一个实体,然后访问oneCustomer.FirstName属性。
还可以通过修改方法来返回一个记录(如果找不到则返回null)的方式来解决问题。在方法中使用Where方法来筛选符合条件的记录,然后使用FirstOrDefault方法来返回第一个记录。
具体代码如下:
var customers = testing(); foreach (CustomerMain customer in customers) { // 访问customer.FirstName属性 } var customers = testing(); var oneCustomer = customers.FirstOrDefault(c => c.FirstName == "Thor"); // 访问oneCustomer.FirstName属性 public CustomerMain FindOne(string firstName) { using (var context = new CustomerEntities()) { var query = context.CustomerMains.Where(p => p.FirstName == firstName); return query.FirstOrDefault(); } }