Тип передачи C # в качестве переменной. Как это сделать? - PullRequest
0 голосов
/ 04 октября 2019

У меня есть код, который я хочу использовать повторно. Для этого мне нужно передать тип DbSet динамически. Как мне заставить это работать?

 public virtual DbSet<Runlist> Runlists { get; set; }
public void Method(Type myType)
{
    using (var ctx = new FpContext())
    {
        Type myVariableType = myType;
        var table = "myTable";

        var sql = ctx.Database
            .SqlQuery<myVariableType>("SELECT * FROM  @table WHERE (UserId = @userid)"
            , new SqlParameter("@userid", user.Id)
            , new SqlParameter("@table", table)).ToList();
    }

foreach (var r in sql)
{
    foreach (XElement e in xmlDoc.Descendants(ns + "RateRequest"))
    {
        var originCode = e.Element(ns + "RequestedShipment").Element(ns + "Shipper").Element(ns + "Address").Element(ns + "PostalCode");
        var postalCode = e.Element(ns + "RequestedShipment").Element(ns + "Recipient").Element(ns + "Address").Element(ns + "PostalCode");
        var shipTime = e.Element(ns + "RequestedShipment").Element(ns + "ShipTimestamp");
        var serviceType = e.Element(ns + "RequestedShipment").Element(ns + "ServiceType");
        var totalWeight = e.Element(ns + "RequestedShipment").Element(ns + "TotalWeight").Element(ns + "Value");
        var packageCount = e.Element(ns + "RequestedShipment").Element(ns + "PackageCount");
        var weight = e.Element(ns + "RequestedShipment").Element(ns + "RequestedPackageLineItems").Element(ns + "Weight").Element(ns + "Value");

        originCode.SetValue(origin);
        postalCode.SetValue(r.Zipcode);
        shipTime.SetValue(dt);
        serviceType.SetValue("FEDEX_GROUND");
        totalWeight.SetValue(r.TotalWeight);
        packageCount.SetValue(r.BoxCount);
        weight.SetValue(r.Weight);
    }

    xmlDoc.Save(HttpContext.Current.Server.MapPath("~/Requests/SoapRequest_v24.xml"));

}
}

Я опубликовал дополнительный код, чтобы попытаться объяснить больше того, что я пытаюсь выполнить.

1 Ответ

0 голосов
/ 04 октября 2019

Если вы используете метод SqlQuery из EntityFramework, существует перегрузка, которая получает тип в качестве параметра, поэтому ваш код может выглядеть примерно так:

public void Method(Type myType)
{
    using (var ctx = new FpContext())
    {
        Type myVariableType = myType;
        var table = "myTable";

        var sql = ctx.Database
            .SqlQuery(myVariableType, "SELECT * FROM  @table WHERE (UserId = @userid)"
            , new SqlParameter("@userid", user.Id)
            , new SqlParameter("@table", table)).ToList();
    }
}

Этот метод можно проверить здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...