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
答案 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
尝试First
或Single
或者如果数据库有可能返回null,请使用FirstOrDefault
或SingleOrDefault
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();
它将确保如果没有记录返回,则您的代码不会爆炸抛出异常。