2013-05-10 59 views
0

我想檢索數據表CPayment,但是當我寫linq查詢,CPaymentModel類屬性加載,但TransactionHelper類屬性未加載,無法查看如何從幫助類屬性檢索數據使用Linq查詢C#

如何訪問Helper Class屬性或如何獲得Classes Helper和Non-Helper屬性列表?如何解決這個問題..

我的模型類代碼爲

public class CPaymentModel<br> 
{ 
    public CPaymentModel()<br> 
    { 
     Transaction =new TransactionHelper(); 
    } 

     //Local Class Properties  
     public UInt64 CardNo { get; set; } 
     public DateTime FileDate { get; set; }   

     //Helper Class 
     public TransactionHelper Transaction { get; set; } 
} 

public class TransactionHelper<br> 
{ 
     public int TransCode { get; set; } 
     public DateTime TransDate { get; set; } 
} 

控制器代碼是:

public ActionResult GetPersons([DataSourceRequest] DataSourceRequest dsRequest) 
{ 
    var session = SessionManager.GetCurrentSession();<br> 
    var data2 = session.Query <CPayment>().Select(row => new CPaymentModel() 
    { 
     CardNo = row.CardNo,<br> 
     FileDate = row.FileDate,<br> 
     Transaction =row.Transaction<br> 
    }).ToList <CPaymentModel>();<br> 
    var list = data2.ToDataSourceResult(dsRequest); 
    return Json(list); 
} 

索引頁(KendoUI格)代碼:

@(Html.Kendo().Grid <CPaymentModel>() 
    .Name("PaymentInfo") 
    .DataSource(dataSource => dataSource 
    .Ajax()<br> 
    .Read(read => read.Action("GetPersons", "KendoDemo")) 
) 
) 

我的輸出是: [點擊] http://i.stack.imgur.com/ZjKPU.png

+0

從你的例子是不清楚的地方和你如何存儲你的數據。這是一個數據庫嗎?你還將你的TransactionHelper存儲在那裏嗎?而你無法訪問ar查看它的屬性是什麼意思?它們是否包含空值?或者它是整行?交易是空的? – ElDog 2013-05-10 14:14:57

+0

在CPaymentModel中聲明瞭TransactionHelper嗎?還是你沒有正確格式化你的代碼?那麼CPayment課程中有CPaymentModel的列表嗎? – Yatrix 2013-05-10 14:24:38

回答

1

試試這個

var session = SessionManager.GetCurrentSession(); 

var data2 = session.Query<CPayment>().Select(row => new CPaymentModel() 
{ 
    CardNo = row.CardNo, 
    Product = row.ProductDetails.Product, 
    Subproduct = row.ProductDetails.Subproduct, 
    FileDate = row.FileDate, 
    Transaction =new TransactionHelper() 
    { 
     TransCode = row.Transaction.TransCode; 
     TransDate = row.Transaction.TransDate 
    } 
}).ToList<CPaymentModel>(); 
var list = data2.ToDataSourceResult(dsRequest); 
+0

僅更改爲索引碼(劍道UI):
@(Html.Kendo()網格()
請將.Name( 「PaymentInfo」)
.Columns(COL =>
{
山口.Bound(C => c.CardNo);
col.Bound(C => c.FileDate);
col.Bound(C => c.Transaction.TransCode);
col.Bound(C => c.Transaction。TransDate);
}

.DataSource(展現dataSource =>展現dataSource
阿賈克斯()
.Read(讀取=> read.Action( 「GetPersons」, 「DataBinder的」))

2013-05-10 15:24:30

0

如果你想創建事務助手的新對象使用此方法。在這裏我創建了一個新對象並使用初始化器語法來設置屬性。

var session = SessionManager.GetCurrentSession(); 

var data2 = session.Query<CPayment>().Select(row => new CPaymentModel() 
{ 
    CardNo = row.CardNo, 
    Product = row.ProductDetails.Product, 
    Subproduct = row.ProductDetails.Subproduct, 
    FileDate = row.FileDate, 
    Transaction = new TransactionHelper 
    { 
     TransCode = row.Transaction.TransCode, 
     TransDate = row.Transaction.TransDate 
    } 
}).ToList<CPaymentModel>(); 
var list = data2.ToDataSourceResult(dsRequest); 

你知道嗎?你總是可以寫一個lambda函數而不是lambda表達式像:

row => 
{ 
    CPaymentModel cpModel = new CPaymentModel() 
    { 
     CardNo = row.CardNo, 
     Product = row.ProductDetails.Product, 
     Subproduct = row.ProductDetails.Subproduct, 
     FileDate = row.FileDate, 
     Transaction = new TransactionHelper() 
    }; 
    cpModel.Transaction = new Transaction(); 
    cpModel.Transaction.TransCode = row.Transaction.TransCode; 
    cpModel.Transaction.TransDate = row.Transaction.TransDate; 

    return cpModel; 
} 

這是一個完全有效的結構。當你不能用初始化器做所有事情時它會很有用。

0

也許調用包含方法與路徑事務屬性作爲參數,表明EF應與所有屬性加載

var session = SessionManager.GetCurrentSession(); 

var data2 = session.Query<CPayment>().**Include("CPayment.Transaction").**Select(row => new CPaymentModel() 
{ 
     CardNo = row.CardNo, 
     Product = row.ProductDetails.Product, 
     Subproduct = row.ProductDetails.Subproduct, 
     FileDate = row.FileDate, 
     Transaction =row.Transaction 
    }).ToList<CPaymentModel>(); 
var list = data2.ToDataSourceResult(dsRequest);