Как я наиболее изящно выражаю оставленное соединение совокупным SQL как запрос LINQ

Для выбора только определенных столбцов из нескольких столбцов для заданного значения в pandas:

select col_name1, col_name2 from table where column_name = some_value.

Опции:

df.loc[df['column_name'] == some_value][[col_name1, col_name2]]

или

df.query['column_name' == 'some_value'][[col_name1, col_name2]]
19
задан user2771704 7 April 2015 в 12:52
поделиться

3 ответа

Решение, хотя то, которое задерживает обработку нулевого значения к коду, могло быть:

DateTime вчера = DateTime. Теперь. Дата. AddDays (-1);

var collection=
    from u in db.Universe
    select new
    {
        u.id,
        u.name,
        MaxDate =(DateTime?)
       (
           from h in db.History
           where u.Id == h.Id
           && h.dateCol < yesterday
           select h.dateCol 
       ).Max()
    };

Это не производит точно тот же SQL, но действительно обеспечивает тот же логический результат. Перевод "сложных" SQL-запросов к LINQ не всегда прост.

9
ответ дан 30 November 2019 в 05:17
поделиться

Это не полный ответ для Вас, но на левой части соединения можно использовать оператор DefaultIfEmpty как так:

var collection = 
from u in db.Universe
join history in db.History on u.id = history.id into temp
from h in temp.DefaultIfEmpty()
where h.dateCol < DateTime.Now.Date.AddDays(-1)
select u.id, u.name, h.dateCol ?? '1900-01-01'

у меня не было потребности сделать любые команды groupby все же, таким образом, я пропустил, это относительно не отправляет Вам вниз неправильный путь. Две других быстрых вещи отметить. Я не мог на самом деле присоединиться на двух параметрах хотя как выше существуют способы обойти его. Кроме того?? оператор работает действительно хорошо вместо isnull в SQL.

0
ответ дан 30 November 2019 в 05:17
поделиться

Вы собираетесь хотеть использовать join into создайте для создания запроса группы.

TestContext db = new TestContext(CreateSparqlTripleStore());
var q = from a in db.Album
        join t in db.Track on a.Name equals t.AlbumName into tracks
        select new Album{Name = a.Name, Tracks = tracks};
foreach(var album in q){
    Console.WriteLine(album.Name);
    foreach (Track track in album.Tracks)
    {
        Console.WriteLine(track.Title);
    }
}
0
ответ дан 30 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: