如何使用Linq查询从helper类属性中检索数据

本文关键字:属性 检索 数据 helper 何使用 Linq 查询 | 更新日期: 2023-09-27 18:13:06

我想检索数据表单CPayment的列表,但是当我写linq查询时,CPaymentModel类属性被加载,但TransactionHelper类属性未加载,无法查看

如何访问Helper类属性或如何获得类Helper和非Helper属性的列表?如何解决这个问题…

My Model Class Code is

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-grid)代码:

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

My Output Is:(点击)https://i.stack.imgur.com/ZjKPU.png

如何使用Linq查询从helper类属性中检索数据

试试这个

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);

可能调用Include方法,将Transaction属性的路径作为参数,表明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);

如果您想创建事务助手的新对象,请使用此方法。这里我创建了一个新对象,并使用初始化器语法来设置属性。

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;
}

这是一个完全有效的结构。