Chloe
Chloe — это облегчённая библиотека объектно-реляционного отображения (ORM).
Интерфейс запроса похож на LINQ. С помощью Chloe.ORM можно запрашивать данные, как в LINQ, и выполнять любые действия (объединение запросов, групповые запросы, агрегатные запросы, вставка, пакетное обновление, пакетное удаление, сегментирование) с использованием лямбда-выражений.
Документация: https://github.com/shuxinqin/Chloe/wiki
База данных | Команда установки |
---|---|
SqlServer | Install-Package Chloe.SqlServer |
MySql | Install-Package Chloe.MySql |
Oracle | Install-Package Chloe.Oracle |
SQLite | Install-Package Chloe.SQLite |
PostgreSQL | Install-Package Chloe.PostgreSQL |
达梦 | Install-Package Chloe.Dameng |
人大金仓 | Install-Package Chloe.KingbaseES |
Лицензия MIT
public enum Gender
{
Male = 1,
Female
}
[Table("Users")]
public class User
{
[Column(IsPrimaryKey = true)]
[AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public Gender? Gender { get; set; }
public int? Age { get; set; }
public int? CityId { get; set; }
public DateTime? OpTime { get; set; }
}
public class City
{
[Column(IsPrimaryKey = true)]
public int Id { get; set; }
public string Name { get; set; }
public int ProvinceId { get; set; }
}
public class Province
{
[Column(IsPrimaryKey = true)]
public int Id { get; set; }
public string Name { get; set; }
}
IDbContext context = new MsSqlContext(DbHelper.ConnectionString);
IQuery<User> q = context.Query<User>();
IQuery<User> q = context.Query<User>();
q.Where(a => a.Id > 0).FirstOrDefault();
q.Where(a => a.Id > 0).ToList();
q.Where(a => a.Id > 0).OrderBy(a => a.Age).ToList();
q.Where(a => a.Id > 0).Take(10).OrderBy(a => a.Age).ToList();
q.Where(a => a.Id > 0).OrderBy(a => a.Age).ThenByDesc(a => a.Id).Select(a => new { a.Id, a.Name }).Skip(20).Take(10).ToList();
/*
* SELECT TOP (10) [T].[Id] AS [Id],[T].[Name] AS [Name] FROM (SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],ROW_NUMBER() OVER(ORDER BY [Users].[Age] ASC,[Users].[Id] DESC) AS [ROW_NUMBER_0] FROM [Users] AS [Users] WHERE [Users].[Id] > 0) AS [T] WHERE [T].[ROW_NUMBER_0] > 20
*/
q.Where(a => a.Id > 0).Where(a => a.Name.Contains("lu")).ToList();
/*
* SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],[Users].[Gender] AS [Gender],[Users].[Age] AS [Age],[Users].[CityId] AS [CityId],[Users].[OpTime] AS [OpTime]
* FROM [Users] AS [Users]
* WHERE ([Users].[Id] > 0 AND [Users].[Name] LIKE '%' + N'lu' + '%')
*/
MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);
var user_city_province = context.Query<User>()
.InnerJoin<City>((user, city) => user.CityId == city.Id)
.InnerJoin<Province>((user, city, province) => city.ProvinceId == province.Id);
user_city_province.Select((user, city, province) => new { UserId = user.Id, CityName = city.Name, ProvinceName = province.Name }).Where(a => a.UserId == 1).ToList();
/*
* SELECT [Users].[Id] AS [UserId],[City].[Name] AS [CityName],[Province].[Name] AS [ProvinceName]
* FROM [Users] AS [Users]
* INNER JOIN [City] AS [City] ON [Users].[CityId] = [City].[Id]
* INNER JOIN [Province] AS [Province] ON [City].[ProvinceId] = [Province].[Id]
* WHERE [Users].[Id] = 1
*/
var view = user_city_province.Select((user, city, province) => new { User = user, City = city, Province = province });
view.Where(a => a.User.Id == 1).ToList();
/*
* SELECT [Users].[Id] AS [Id],[Users].[Name] AS [Name],[Users].[Gender] AS [Gender],[Users].[Age] AS [Age],[Users].[CityId] AS [CityId],[Users].[OpTime] AS [OpTime],[City].[Id] AS [Id0],[City].[Name] AS [Name0],[City].[ProvinceId] AS [ProvinceId],[Province].[Id] AS [Id1],[Province].[Name] AS [Name1]
* FROM [Users] AS [Users]
* INNER JOIN [City] AS [City] ON [Users].[CityId] =
``` Данный текст написан на языке C#.
В запросе представлен код, который выполняет различные операции с данными в базе данных. В тексте используются запросы LINQ для выборки данных из таблиц Users, City и Province. Также представлены примеры использования различных методов запросов, таких как Where, GroupBy, Having, Select, Count, Sum, Max, Min, Average и других.
**Пример запроса:**
```C#
IQuery<User> q = context.Query<User>();
IGroupingQuery<User> g = q.Where(a => a.Id > 0).GroupBy(a => a.Age);
g = g.Having(a => a.Age > 1 && Sql.Count() > 0);
g.Select(a => new { a.Age, Count = Sql.Count(), Sum = Sql.Sum(a.Age), Max = Sql.Max(a.Age), Min = Sql.Min(a.Age), Avg = Sql.Average(a.Age) }).ToList();
Этот запрос выбирает пользователей с идентификатором больше нуля, группирует их по возрасту, фильтрует группы по условию (возраст больше единицы и количество элементов в группе больше нуля), а затем выбирает возраст, количество, сумму, максимум, минимум и среднее значение возраста для каждой группы. DiffMinutes = Sql.DiffMinutes(startTime, endTime), // DATEDIFF(MINUTE,@P_0,@P_1)
DiffSeconds = Sql.DiffSeconds(startTime, endTime), // DATEDIFF(SECOND,@P_0,@P_1)
DiffMilliseconds = Sql.DiffMilliseconds(startTime, endTime), // DATEDIFF(MILLISECOND,@P_0,@P_1)
// DiffMicroseconds = Sql.DiffMicroseconds(startTime, endTime), // DATEDIFF(MICROSECOND,@P_0,@P_1) Exception
AddYears = startTime.AddYears(1), // DATEADD(YEAR,1,@P_0)
AddMonths = startTime.AddMonths(1), // DATEADD(MONTH,1,@P_0)
AddDays = startTime.AddDays(1), // DATEADD(DAY,1,@P_0)
AddHours = startTime.AddHours(1), // DATEADD(HOUR,1,@P_0)
AddMinutes = startTime.AddMinutes(2), // DATEADD(MINUTE,2,@P_0)
AddSeconds = startTime.AddSeconds(120), // DATEADD(SECOND,120,@P_0)
AddMilliseconds = startTime.AddMilliseconds(20000), // DATEADD(MILLISECOND,20000,@P_0)
Now = DateTime.Now, // GETDATE()
UtcNow = DateTime.UtcNow, // GETUTCDATE()
Today = DateTime.Today, // CAST(GETDATE() AS DATE)
Date = DateTime.Now.Date, // CAST(GETDATE() AS DATE)
Year = DateTime.Now.Year, // DATEPART(YEAR,GETDATE())
Month = DateTime.Now.Month, // DATEPART(MONTH,GETDATE())
Day = DateTime.Now.Day, // DATEPART(DAY,GETDATE())
Hour = DateTime.Now.Hour, // DATEPART(HOUR,GETDATE())
Minute = DateTime.Now.Minute, // DATEPART(MINUTE,GETDATE())
Second = DateTime.Now.Second, // DATEPART(SECOND,GETDATE())
Millisecond = DateTime.Now.Millisecond, // DATEPART(MILLISECOND,GETDATE())
DayOfWeek = DateTime.Now.DayOfWeek, // (DATEPART(WEEKDAY,GETDATE()) - 1)
Int_Parse = int.Parse("1"), // CAST(N'1' AS INT)
Int16_Parse = Int16.Parse("11"), // CAST(N'11' AS SMALLINT)
Long_Parse = long.Parse("2"), // CAST(N'2' AS BIGINT)
Double_Parse = double.Parse("3"), // CAST(N'3' AS FLOAT)
Float_Parse = float.Parse("4"), // CAST(N'4' AS REAL)
Guid_Parse = Guid.Parse("D544BC4C-739E-4CD3-A3D3-7BF803FCE179"), // CAST(N'D544BC4C-739E-4CD3-A3D3-7BF803FCE179' AS UNIQUEIDENTIFIER) AS [Guid_Parse]
Bool_Parse = bool.Parse("1"), // CASE WHEN CAST(N'1' AS BIT) = CAST(1 AS BIT) THEN CAST(1 AS BIT) WHEN NOT (CAST(N'1' AS BIT) = CAST(1 AS BIT)) THEN CAST(0 AS BIT) ELSE NULL END AS [Bool_Parse]
DateTime_Parse = DateTime.Parse("1949-10-01"), // CAST(N'1949-10-01' AS DATETIME) AS [DateTime_Parse]
B = a.Age == null ? false : a.Age > 1
IDbContext context = new MsSqlContext(DbHelper.ConnectionString);
int id = (int)context.Insert(() => new User() { Name = "lu", Age = 18, Gender = Gender.Male, CityId = 1, OpTime = DateTime.Now });
User user = new User(); user.Name = "lu"; user.Age = 18; user.Gender = Gender.Male; user.CityId = 1; user.OpTime = new DateTime(1970, 1, 1);
user = context.Insert(user);
MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);
context.Update(a => a.Id == 1, a => new User() { Name = a.Name, Age = a.Age + 1, Gender = Gender.Male, OpTime = DateTime.Now });
context.Update(a => a.Gender == Gender.Woman, a => new User() { Age = a.Age - 1, OpTime = DateTime.Now });
User user = new User(); user.Id = 1; user.Name = "lu"; user.Age = 28; user.Gender = Gender.Male; user.OpTime = DateTime.Now;
context.Update(user); //update all columns
В запросе представлен код на языке C#, в котором используются методы работы с данными и объектами модели. В тексте запроса также присутствуют фрагменты кода, связанные с использованием SQL-запросов для работы с базами данных.
К сожалению, без контекста сложно понять, что именно делает этот код. Но можно предположить, что он связан с созданием и обновлением объектов модели, а также с выполнением SQL-запросов к базе данных. 28;
Nullable @P_3 = NULL; DateTime @P_4 = "2016/7/8 11:28:27"; Int32 @P_5 = 1; UPDATE [Users] SET [Name]=@P_0,[Gender]=@P_1,[Age]=@P_2,[CityId]=@P_3,[OpTime]=@P_4 WHERE [Users].[Id] = @P_5
context.TrackEntity(user);//отслеживание сущности user.Name = user.Name + "1"; context.Update(user);//обновление столбца «Имя»
/*
String @P_0 = "lu1"; Int32 @P_1 = 1; UPDATE [Users] SET [Name]=@P_0 WHERE [Users].[Id] = @P_1 */
Delete
MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString);
context.Delete(a => a.Id == 1); /*
context.Delete(a => a.Gender == null); /*
User user = new User(); user.Id = 1; context.Delete(user); /*
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )