2016-12-14 36 views
-1
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 
+1

您應該包含錯誤消息。 –

+0

假設您使用的是Visual Studio,您可以將鼠標懸停在客戶上並查看「客戶」類型。 – mason

+1

您應該始終發佈完整且準確的錯誤消息。在這種情況下,錯誤消息將聲明你正在嘗試從**轉換**,這對於這個問題很重要。 –

回答

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持有的客戶對象。

+0

「,它會返回一個enumerable到你所寫的」The Select「,甚至不會編譯,所以它不會返回任何*。 – HimBromBeere

+0

我怎樣才能轉換變種結果的ObservableCollection VAR結果= db.From ()。選擇(C => 新 { 客戶ID = Customer.CustomerId, CompanyId = Customer.CompanyName, 聯繫人姓名= Customer.ContactName , ContactTitle = Customer.ContactTitle }); Customers = new ObservableCollection (result); – progRiaz

+0

'Select()'處理結果集中的每個項目。因此,您的代碼將從數據庫中獲取每個客戶,並從中創建一個新的匿名對象。因此返回一組匿名對象。如果你只需要一個,使用'SingleOrDefault'或'FirstOrDefault'。正如上面提出的幾個答案。 – Shelby115

0

,因爲你選擇customer收集

可以使用First()對於選擇的第一個客戶,根據情況

var customer = db.From<Customer>().Where(c => c.CustomerId == Customer.CustomerId).First(); 
0

如果你需要一個對象,你應該使用FirstOrDefault()Where()

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

它將確保如果沒有記錄返回您的代碼將不會拋出拋出異常。

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給客戶。

3

var關鍵字

此關鍵字隱含斷定哪些變量的類型是基於它的價值。這就是爲什麼像var test = null;這樣的東西不能編譯,因爲它不知道null應該是什麼類型(因爲任何對象都可以爲null)。有關var關鍵字的更多信息。

選擇客戶

顯然,根據你的代碼,你要選擇與給定的客戶編號的客戶。要做到這一點,

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

從技術上講,FirstOrDefault也將工作。所不同的是主要是 symantical,使用FirstOrDefault時,你想要的第一個很多。如果您希望得到一個且只有一個結果,請使用SingleOrDefault