Получить linq, чтобы вернуть IEnumerable <DataRow>результат - PullRequest
2 голосов
/ 21 декабря 2010

Как я могу преобразовать следующий запрос SQL в LINQ в C #?

Мне не нужны все столбцы из обеих таблиц, а набор результатов должен быть

IEnumerable<DataRow>

Запрос:

select 
    c.level, cl.name, c.quantity
from 
    dbo.vw_categories c
left join 
    dbo.vw_categoriesLocalization cl on c.level = cl.level 
                                     and cl.language = 'en'
where 
    c.level like '000%' 
    and c.level <> '000';

Ожидается:

IEnumerable<DataRow> result = ????

Заранее спасибо ..

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

Вот как бы вы написали запрос:

var query =
    from c in db.vw_categories
    join cl in db.vw_categoriesLocalization on c.level equals cl.level into clo
    from cl in clo.DefaultIfEmpty()
    where (cl == null || cl.language == "en")
          && c.level.StartsWith("000")
          && c.level != "000"
    select new
    {
        c.level,
        name = cl == null ? null : cl.name,
        c.quantity
    }

Чтобы преобразовать это в IEnumerable<DataRow>, возможно, вы могли бы сделать что-то вроде этого:

var datarows = query.Select(r => {
    var row = dataTable.NewRow();
    row["level"] = r.level;
    row["name"] = r.name;
    row["quantity"] = r.quantity;
    return row;
});
1 голос
/ 22 декабря 2010

При использовании LINQ to SQL:

var ctx = new SomeDataContext();
from c in ctx.vw_categories
join cl in ctx.vw_categoriesLocation
on c.level equals cl.level into g
from clv in g.DefaultIfEmpty()
where (clv == null || clv.language == "en")
&& c.level.Contains("000%")
&& c.level != "000"
select new
{
  c.level,
  name = (clv != null) ? clv.name : default(string),
  quantity = c.quantity
};

Подробнее здесь: http://codingsense.wordpress.com/2009/03/08/left-join-right-join-using-linq/

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