如何将type var转换为Customer类的对象

时间:2016-12-14 13:13:39

标签: c#

public class Customer
{
    private int customerId;
    private string contactTitle;
    private string country;
    private string contactName;
}

var customer = db.From<Customer>().Where(c => c.CustomerId == Customer.CustomerId).Select();
Customer cc = (Customer)customer;
// it is error i can't convert to object of class Customer

5 个答案:

答案 0 :(得分:3)

var关键字

此关键字隐式地根据其值确定变量的类型。这就是var test = null;之类的东西不能编译的原因,因为它不知道null应该是什么类型(因为任何对象都可以为null)。有关var关键字的更多信息。

选择客户

显然,根据您的代码,您希望选择具有给定CustomerId的客户。为此,

var customer = db.From<Customer>().SingleOrDefault(c => c.CustomerId == Customer.CustomerId);

从技术上讲,FirstOrDefault也可以。区别在于主要是语法,当您想要第一个时,请使用FirstOrDefault。当您期望只有一个结果时,请使用SingleOrDefault

答案 1 :(得分:1)

如果你要检查你的错误,你会发现它可能会说:“无法从IEnumerable转换为Costumer”。

这是因为LinQ中的Where会返回一个Costumers集合,即使它只是一个Costumer它仍然是一个集合。

而不是Where尝试FirstSingle或者如果数据库有可能返回null,请使用FirstOrDefaultSingleOrDefault

var customer = db.From<Customer>().First(c => c.CustomerId == Customer.CustomerId);    
var customer = db.From<Customer>().Single(c => c.CustomerId == Customer.CustomerId);
var customer = db.From<Customer>().SingleOrDefault(c => c.CustomerId == Customer.CustomerId);
var customer = db.From<Customer>().FirstOrDefault(c => c.CustomerId == Customer.CustomerId);

通过使用其中一个选项,您无需将其从var转换为Customer。

答案 2 :(得分:0)

首先,var不是一个类型,它更像是一个强类型占位符,用于放入它的第一个类型。在这种情况下,IEnumerable客户或IQueryable。

您可以通过更改以下内容来解决此问题:

var customer = db.From().Where(c => c.CustomerId == Customer.CustomerId).Select();

将返回一个枚举:

var customer = db.From().Where(c => c.CustomerId == Customer.CustomerId).SingleOrDefault();

然后var持有客户对象。

答案 3 :(得分:0)

因为您选择了customer集合

您可以根据条件

使用First()选择第一位客户
var customer = db.From<Customer>().Where(c => c.CustomerId == Customer.CustomerId).First();

答案 4 :(得分:0)

如果您需要单个对象,则应在FirstOrDefault()之后使用Where()

Customer customer = db.From<Customer>()
                      .Where(c => c.CustomerId == Customer.CustomerId)
                      .FirstOrDefault();

它将确保如果没有记录返回,则您的代码不会爆炸抛出异常。