Не удается конвертировать с помощью группировки LINQ - PullRequest
0 голосов
/ 12 сентября 2018

Привет, вот что у меня есть ... В моем контроллере:

public ActionResult SingleFeed (string linename)
{
    var result = (from x in db.is1
                  where x.in_service == "Y"
                  join y in db.isckts on
                  x.is_id equals y.is_id
                  where y.line_name == linename
                  group new {x, y} by x.is_id into xyg
                  where xyg.Count() == 1
                  select xyg);
    var SFM = new CircuitsViewModel()
    {
        IsDetails = result.ToList()
    };

    return View(SFM);
}

На мой взгляд:

public class CircuitsViewModel
{
        public List<is1> IsDetails { get; set; }
        public List<isckt> IscktDetails { get; set; }
}

Я получаю

не может неявно преобразовать тип «System.Collections.Generic.List (System.Linq.IGrouping (короткий, (анонимный тип: is1 x, isckt y))) «System.Collections.Generic.List (IS1)

Интересно, может ли кто-нибудь помочь с этой ошибкой? Это началось, когда я попытался использовать группировку LINQ, но я понятия не имею, как смоделировать модель представления или изменить запрос LINQ в соответствии с типом.

Идея, лежащая в основе запроса LINQ, состоит в том, чтобы возвращать записи, в которых нет повторяющихся записей в столбце id таблицы isckts.

UPDATE: В настоящее время пытается выяснить, как найти дубликаты в db.isckts.is_ID, затем выполнить объединение по IS_ID, а затем указать, где указать имя_строки и in_service

Любая помощь будет принята с благодарностью! ура!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Похоже, вы просто хотите, чтобы строки из db.is1 не имели повторяющихся db.isckts совпадающих строк, поэтому вам нужно просто сгруппировать и вернуть is1 строки.

var result = from x in db.is1
             where x.in_service == "Y"
             join y in db.isckts on x.is_id equals y.is_id
             where y.line_name == linename
             group x by x.is_id into xg
             where xg.Count() == 1
             select xg.First();

Однако, поскольку вы просто используете группирование для подсчета объединенных строк, вы можете использовать вместо этого оператор LINQ Group Join:

var AjoinB = from x in db.tableA
             where x.inservice
             join y in db.tableB on x.is_id equals y.is_id into yj
             where yj.Count(y => y.line_name == linename) == 1
             select x;

Я переключился на лямбда-синтаксис, чтобы добавить условие к счету на y; Вы можете добавить условие к db.tableB, используя также метод Where, или даже создать подзапрос для представления отфильтрованного db.tableB:

var filtered_isckts = from y in db.isckts
                      where y.line_name == linename
                      select y;
var result = from x in db.is1
             where x.in_service == "Y"
             join y in filtered_isckts on x.is_id equals y.is_id into yj
             where yj.Count() == 1
             select x;

Чтобы изменить filtered_isckts для включения только id s в одну строку, выполните группировку по первому запросу:

var filtered_isckts = from y in db.isckts
                      where y.line_name == linename
                      group y by y.is_id into yg
                      where yg.Count() == 1
                      select yg.First();
var result = from x in db.is1
             where x.in_service == "Y"
             join y in filtered_isckts on x.is_id equals y.is_id
             select x;
0 голосов
/ 12 сентября 2018

Поскольку linq group не возвращает List<IsDetails>

Вы должны использовать result.Select(x => new IsDetails {});

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