代码之家  ›  专栏  ›  技术社区  ›  Steve Staple

我可以把这个放在单独的课上吗?

  •  0
  • Steve Staple  · 技术社区  · 12 年前

    我有一段重复的代码:

    var expCodes = (from cpdet in _dataContextOrders.CodeProfileDetails
                    join cpd in _dataContextOrders.CodeProfileDefinitions on cpdet.CodeProfileDefinitionID equals cpd.ID
                    join cp in _dataContextOrders.CodeProfiles on cpd.CodeProfileID equals cp.ID
                    join cc in _dataContextOrders.FMSCostCentres on cpdet.CostCentreID equals cc.ID
                    join ec in _dataContextOrders.FMSExpenseCodes on cpdet.ExpenseCodeID equals ec.ID
                    where cp.ID == Convert.ToInt32(intCostCodeProfileId)
                                      && cpdet.CostCentreID == Convert.ToInt32(intCostCentreSelected)
                                      && ec.Active == true
                    select new
                    {
                        ec.ID,
                        ec.CostCentreID,
                        ExpenseCodeExternalRef = ec.ExternalRef,
                        ExpenseCodeDescription = ec.Description,
                        displayExpenseCode = ec.ExternalRef + " " + ec.Description
                     }).Distinct().OrderBy(ec => ec.displayExpenseCode);
    
    ddlExpCode1.DataSource = expCodes;
    ddlExpCode1.DataTextField = "displayExpenseCode";
    ddlExpCode1.DataValueField = "ID";
    

    我想做的是,像我们在LinqToSql之前所做的那样,将其单独放入一个类中,我可以使用两个参数intCostCodeProfileId和intCostCodeProfile Id从aspx.cs页面调用该类,它将返回下拉列表的数据。

    我该怎么做?

    2 回复  |  直到 12 年前
        1
  •  2
  •   KnaÄ£is    12 年前

    您必须创建一个与中的财产匹配的模型类 select 语句(ID、CostCentreId等)。然后修改 select new { select new FreshlyCreatedModelClass() { .

    从方法返回匿名类型的唯一方法是使用 IEnumerable<object> IEnumerable<dynamic> 在这种情况下,两者都不应推荐。您的方法应该返回 IEnumerable<FreshlyCreatedModelClass> (或 IQueryable<FreshlyCreatedModelClass> 如果需要进一步构建查询,可以使用)。

    对模型类进行排序后,只需将代码移到一个单独的方法即可。

        2
  •  -1
  •   Servy    12 年前

    创建一个普通类(例如Connection.cs)并添加如下代码:

    public class MyDataSourceReturner
    {
        public static Object retDatasource(Object _dataContextOrders, int intCostCodeProfileId){
        var expCodes = (from cpdet in _dataContextOrders.CodeProfileDetails
                join cpd in _dataContextOrders.CodeProfileDefinitions on cpdet.CodeProfileDefinitionID equals cpd.ID
                join cp in _dataContextOrders.CodeProfiles on cpd.CodeProfileID equals cp.ID
                join cc in _dataContextOrders.FMSCostCentres on cpdet.CostCentreID equals cc.ID
                join ec in _dataContextOrders.FMSExpenseCodes on cpdet.ExpenseCodeID equals ec.ID
                where cp.ID == Convert.ToInt32(intCostCodeProfileId)
                                  && cpdet.CostCentreID == Convert.ToInt32(intCostCentreSelected)
                                  && ec.Active == true
                select new
                {
                    ec.ID,
                    ec.CostCentreID,
                    ExpenseCodeExternalRef = ec.ExternalRef,
                    ExpenseCodeDescription = ec.Description,
                    displayExpenseCode = ec.ExternalRef + " " + ec.Description
                 }).Distinct().OrderBy(ec => ec.displayExpenseCode);
    
        return expCodes;
        }
    }
    

    之后,您可以像这样使用此代码:

    ddlExpCode1.DataSource = MyDataSourceReturner.retDatasource(_dataContextOrders, 5);
    

    并接收您的DataSource。

    推荐文章