我正在使用C#和MS Sql Server R2。我有一个名为"Customer"
的数据库表,这里是字段。
( CusId| FName | LName | Gender | Area | RegisterDate ).
-------------------------------------------------------
我创建了一个小型数据库应用程序,使用C#和Entity Framework。 我的Winform有一个datadridview。我想要做的是我想将数据表单Customer表绑定到该datagridview。但是当它绑定时,一些列数据应该根据条件进行转换,而一些数据只是转换。 datadridview列是
(ID,Title,Name,Area,Reg Date)
-----------------------------
绑定时,Name列应具有值 连接FName + LName
数据库列已将Gender存储为“M”和“F”。但是当它 绑定到datagirdview它应该成为“先生”和“太太”取决于 价值。
请告诉我如何使用Entity框架在C#中编写LINQ查询以正确检索数据。 帮我解决这个烂摊子。 :)
答案 0 :(得分:0)
var result = from r in query
select new {
ID = r.CustID,
Title = ?,
Name = r.Fname + " " + r.LName,
// ...
};
答案 1 :(得分:0)
好吧,其中一个选项可以是创建与DataGridView布局匹配的DTO(数据传输对象)。
e.g。
class CustomerDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Title { get; set; }
public string Area { get; set; }
public string RegDate { get; set; }
}
然后使用EF从数据库中获取数据并将其选择到您的DTO中。
类似的东西:
var customerDtos = context.Customers.ToList().Select(c=> new CustomerDto
{
Id=c.ID, Area = c.Area, Name = c.FName + " " + c.LName, RegDate = c.Date.Format("yyyy-MM-dd"), Title = c.Gender == "M" ? "Mr" : "Ms"
});
当然考虑添加分页支持等是个好主意,但这大概就是你需要的。 然后将结果绑定到DataGridView
dataGridView1.DataSource = customerDtos;
答案 2 :(得分:0)
假设您有以下实体映射到您的数据库表:
class Customer
{
public int CusId { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string Gender { get; set; }
public string Area { get; set; }
public DateTime RegisterDate { get; set; }
}
创建将绑定到网格的视图模型:
class CustomerModel
{
public int ID { get; set; }
public string Title { get; set; }
public string Name { get; set; }
public string Area { get; set; }
public string RegDate { get; set; }
}
现在您可以使用一些映射库在这两个实体之间进行映射。我建议你使用AutoMapper(你可以从NuGet获得)。第一步是创建地图(通常在应用程序启动时添加此代码):
Mapper.CreateMap<Customer, CustomerModel>()
.ForMember(cm => cm.ID, m => m.MapFrom(c => c.CusId))
.AfterMap((c,cm) => {
cm.Name = String.Format("{0} {1}", c.FName, c.LName);
cm.Title = (c.Gender == "M") ? "Mr" : "Mrs";
cm.RegDate = c.RegisterDate.ToString("yyyy-MM-dd");
});
然后,您将能够将数据库实体映射到将在UI上显示的模型:
var customers = db.Customers.ToList(); // get customers from database
var models = Mapper.Map<List<CustomerModel>>(customers);
// then bind your grid to models