возвращение данных SQL-запроса из модели в контроллер - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь спроектировать панель данных / панель данных sql.Я подключился к базе данных SQL с помощью Entity Framework 6.

Я пытался осуществить это, выполнив запрос в Model и затем передав значение в Homecontroller

Model

 public class LaserRepo
{
    public string CmRlsd3D { get; set; }

    public void CMRlsd3Days()
    {
        WorkflowEntities db = new WorkflowEntities();
        int CurrentYear = DateTime.Now.Year;
        DateTime firstday = new DateTime(CurrentYear, 1, 25);

        DateTime prevyear = new DateTime(2017, 10, 1);

        DateTime Yday = DateTime.Today.AddDays(-2);
        string Dayofweek = Yday.DayOfWeek.ToString();
        int day1 = (int)(DateTime.Now.DayOfWeek);
        if (day1 == 1)
        {
            Yday = DateTime.Today.AddDays(-4);
        }

        CmRlsd3D   = (from c in db.OrderDetailCheckHistories
                        join d in db.OrderDetails on c.JobNumber equals d.JobNumber
                        where (c.DateTime > firstday && c.DateTime < Yday)
                        where c.FieldName == "Released" || c.FieldName == "Pre Release"
                        where (c.StockCode.Contains("-CA") && !(c.StockCode.Contains("-CAB"))) ||
                        c.StockCode.Contains("-CM") || c.StockCode.Contains("-LP")
                        select new { c.JobNumber }).ToString();                  


    } 

Я хотел бы передать общее количество на мой контроллер / просмотр

CmRlsd3D 

Домашний контроллер

public class HomeController : Controller
{    
    public ActionResult Laser()
    {
        LaserRepo Lr = new LaserRepo();
        var Cm3D = Lr.CmRlsd3D.Count();
        return View(Lr);
    }

1 Ответ

0 голосов
/ 10 октября 2018

Прежде всего вы должны знать, что Lr.CmRlsd3D.Count(); считает количество определенных элементов внутри свойства строки, а не количество наборов результатов, как предполагалось.Также у вас есть множество проблем:

a) Несколько предложений where являются избыточными и могут не возвращать желаемый результат.Используйте оператор && для нескольких where условий, которые используют логические AND.

b) select new { c.JobNumber } использует анонимный тип, который я считаю ненужным.select c.JobNumber достаточно.

c) ToString() для запроса LINQ может возвращать полностью определенное имя типа набора результатов вместо значения.Вам нужно использовать итерацию цикла FirstOrDefault(), SingleOrDefault() или foreach, чтобы получить из него строковое значение.

Поэтому вам следует использовать эту настройку:

1) Использовать целочисленное свойствовнутри класса viewmodel для хранения счетчика.

public int CmRlsd3D { get; set; }

2) Измените тип возвращаемого метода на int и измените запрос, используя Count(), чтобы получить количество записей, как показано в примере ниже:

public int CMRlsd3Days()
{
    WorkflowEntities db = new WorkflowEntities();
    int CurrentYear = DateTime.Now.Year;
    DateTime firstday = new DateTime(CurrentYear, 1, 25);

    DateTime prevyear = new DateTime(2017, 10, 1);

    DateTime Yday = DateTime.Today.AddDays(-2);
    string Dayofweek = Yday.DayOfWeek.ToString();
    int day1 = (int)(DateTime.Now.DayOfWeek);
    if (day1 == 1)
    {
        Yday = DateTime.Today.AddDays(-4);
    }

    var count = (from c in db.OrderDetailCheckHistories
                join d in db.OrderDetails on c.JobNumber equals d.JobNumber
                where (c.DateTime > firstday && c.DateTime < Yday)
                && (c.FieldName == "Released" || c.FieldName == "Pre Release")
                && ((c.StockCode.Contains("-CA") && !(c.StockCode.Contains("-CAB"))) ||
                c.StockCode.Contains("-CM") || c.StockCode.Contains("-LP"))
                select c.JobNumber).Count();               

    return count;
}

3) Назначьте свойство по результату метода.

public ActionResult Laser()
{
    LaserRepo Lr = new LaserRepo();
    Lr.CmRlsd3D = CMRlsd3Days();
    return View(Lr);
}

// alternative using property get definition
public int CmRlsd3D 
{ 
    get
    {
        return CMRlsd3Days();
    }
}

4) На странице внутреннего вида используйте @model LaserRepo и @Model.CmRlsd3D, чтобы отобразить его.

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