解决linq中不允许在查询中显式构造实体类型
2016-10-25 17:50
459 查看
方法一:不使用映射的实体作为返回值类型方法二:添加一个扩展方法,使用Translate搞定首先添加一个类,我把名字定为DataContextExtensions,代码如下:public static class DataContextExtensions
{
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable query)
{
DbCommand command = dataContext.GetCommand(query);
dataContext.OpenConnection();
using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
}
private static void OpenConnection(this DataContext dataContext)
{
if (dataContext.Connection.State == ConnectionState.Closed)
{
dataContext.Connection.Open();
}
}
}
然后是我自己写的关于分页查询(初学linq,不知道是不是规范的):private static string con = ConfigurationManager.AppSettings["ConnectionString"];
private DataClassDataContext dc = new DataClassDataContext(con);
public List<Customers> QueryCustomer(string customer,int PageSize,int PageIndex)
{
Table<Customers> TBcustomer = dc.GetTable<Customers>();
var query = from a in TBcustomer
where a.Customer.Contains(customer)
select
new
{
ID = a.ID,
Customer = a.Customer,
Name = a.Name,
EmployeeID = a.EmployeeID,
EmployeeName = a.EmployeeName,
Region = a.Region,
Country = a.Country,
BU = a.BU,
Tiers = a.Tiers,
NewGroup = a.NewGroup
};
using (dc.Connection)
{
//上面的类中的扩展方法如果没有,此句会报错
return dc.ExecuteQuery<Customers>(query.Skip((PageIndex - 1) * PageSize).Take(PageSize));
}
{
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable query)
{
DbCommand command = dataContext.GetCommand(query);
dataContext.OpenConnection();
using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
}
private static void OpenConnection(this DataContext dataContext)
{
if (dataContext.Connection.State == ConnectionState.Closed)
{
dataContext.Connection.Open();
}
}
}
然后是我自己写的关于分页查询(初学linq,不知道是不是规范的):private static string con = ConfigurationManager.AppSettings["ConnectionString"];
private DataClassDataContext dc = new DataClassDataContext(con);
public List<Customers> QueryCustomer(string customer,int PageSize,int PageIndex)
{
Table<Customers> TBcustomer = dc.GetTable<Customers>();
var query = from a in TBcustomer
where a.Customer.Contains(customer)
select
new
{
ID = a.ID,
Customer = a.Customer,
Name = a.Name,
EmployeeID = a.EmployeeID,
EmployeeName = a.EmployeeName,
Region = a.Region,
Country = a.Country,
BU = a.BU,
Tiers = a.Tiers,
NewGroup = a.NewGroup
};
using (dc.Connection)
{
//上面的类中的扩展方法如果没有,此句会报错
return dc.ExecuteQuery<Customers>(query.Skip((PageIndex - 1) * PageSize).Take(PageSize));
}
相关文章推荐
- Linq to SQL中报错"不允许在查询中显式构造实体类型"怎么解决
- Linq to SQL中报错"不允许在查询中显式构造实体类型"怎么解决
- 1.解决“不允许在查询中显式构造实体类型” 问题
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- 在 LINQ to Entities 查询中无法构造实体或复杂类型
- 在 LINQ to Entities 查询中无法构造实体或复杂类型“Mvc_MusicShop_diy.Models.Order”
- 在 LINQ to Entities 查询中无法构造实体或复杂类型
- 在 LINQ to Entities 查询中无法构造实体或复杂类型
- 在 LINQ to Entities 查询中无法构造实体或复杂类型 "Models.Order”
- 在 LINQ to Entities 查询中无法构造实体或复杂类型
- Linq to Entities中无法构造实体或复杂类型
- Linq查询出现"此上下文仅支持基元类型或枚举类型。"解决方法
- 谁说LINQ复杂查询不支持返回实名类型~定义实体有讲究
- 关于 “不允许从数据类型 sql_variant 到 uniqueidentifier 的隐式转换。请使用 CONVERT 函数来运行此查询“的最终解决
- Jeecg中使用<t: dgCol>标签的自动构造查询条件时出现类型转换错误的解决办法。
- Linq 此提供程序只支持对返回实体或投影(包含所有标识列)的有序查询使用 问题的解决
- linq to sql查询中返回linq自动建立的实体类型)
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 一个泛型的小例子 Linq查询解决Combox绑定问题
- 错误:CS0234: 命名空间“System”中不存在类型或命名空间名称“Linq”的解决方法