C# LINQ ,IQuerable返回类型是什么

太菜了-Andy 2014-08-23 03:03:42
public IQueryable<DataTable> GetQueryResult(string PartNumber, List<String> Status,
string CreatedFromDate, string CreatedEndDate,
string ModifiedFromDate, string ModifiedEndDate
)
{
string methodName = MethodBase.GetCurrentMethod().Name;
logger.DebugFormat("BEGIN: {0}()", methodName);

try
{
using (UnitOfWork uow = new UnitOfWork())
{
IRepository<ProductKeyInfo> prodKeyInfoRep = new Repository<ProductKeyInfo>("SkodaOA3DB");
IRepository<CBRInfo> cbrInfoRep = new Repository<CBRInfo>("SkodaOA3DB");

var query = (from key in prodKeyInfoRep.Query()
join cbr in cbrInfoRep.Query() on key.ProductKeyID equals cbr.ProductKeyID into gj
from subcbr in gj.DefaultIfEmpty()
where key.OEMPartNumber == PartNumber &&
(key.ProductKeyStateID == (byte)1 ||
key.ProductKeyStateID == (byte)2 ||
key.ProductKeyStateID == (byte)3 ||
key.ProductKeyStateID == (byte)33)
orderby key.ModifiedDate
select new
{
key.OEMPartNumber,
key.OEMPONumber,
key.ProductKeyID,
subcbr.SerialNumber,
key.ProductKeyStateID,
key.CreatedDate,
key.ModifiedDate
}).Distinct();
if (Status.Count > 0)
{

query = query.Where(p => Status.Contains(p.ProductKeyStateID.ToString()));

}
if (CreatedFromDate.ToString() != "" && CreatedEndDate.ToString() != "")
{
DateTime strCF=DateTime.ParseExact(CreatedFromDate,"yyyy-MM-dd hh:mm",null);
DateTime strCE=DateTime.ParseExact(CreatedEndDate,"yyyy-MM-dd hh:mm",null);
query = query.Where(p => p.CreatedDate >= strCF).Where(p => p.CreatedDate <= strCE);
}

if (ModifiedFromDate.ToString() != "" && ModifiedEndDate.ToString() != "")
{
DateTime strMF=DateTime.ParseExact(ModifiedFromDate,"yyyy-MM-dd hh:mm",null);
DateTime strME=DateTime.ParseExact(ModifiedEndDate,"yyyy-MM-dd hh:mm",null);
query = query.Where(p => p.ModifiedDate >= strMF).Where(p => p.ModifiedDate <= strME);
}

return query;

总是报这个错:Error 4 Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<System.Data.DataTable>'. An explicit conversion exists (are you missing a cast?) C:\Shi.Andy\andy\IMESService\IMES.Query.Implementation\PAK_MedionOA3Query.cs 76 28 IMES.Query.Implementation
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
romanchaos 2014-08-23
  • 打赏
  • 举报
回复
引用 6 楼 forever4066 的回复:
或者说怎么把返回结果填充到前台的 GridView中
GridView的DataSource直接等于泛型集合就行,不用转回datatable
太菜了-Andy 2014-08-23
  • 打赏
  • 举报
回复
或者说怎么把返回结果填充到前台的 GridView中
太菜了-Andy 2014-08-23
  • 打赏
  • 举报
回复
假如,我想进一步处理怎么把query强制转换为datatable类型的
太菜了-Andy 2014-08-23
  • 打赏
  • 举报
回复
是下面改为上面吧?
romanchaos 2014-08-23
  • 打赏
  • 举报
回复
select new QueryResult { PN = key.OEMPartNumber, PO = key.OEMPONumber, SN = key.ProductKeyID, KeyID = subcbr.SerialNumber, StateID = key.ProductKeyStateID, CDate = key.CreatedDate, MDate = key.ModifiedDate }).Distinct(); 改为 select new { PN = key.OEMPartNumber, PO = key.OEMPONumber, SN = key.ProductKeyID, KeyID = subcbr.SerialNumber, StateID = key.ProductKeyStateID, CDate = key.CreatedDate, MDate = key.ModifiedDate }).Distinct();
太菜了-Andy 2014-08-23
  • 打赏
  • 举报
回复
我写了一个类出来,但是还会出来,大神看看哪里写出问题了 Serializable] public class QueryResult { public string PN; public string PO; public long KeyID; public string SN; public byte StateID; public DateTime CDate; public DateTime MDate; } public IQueryable<QueryResult> GetQueryResult(string PartNumber, List<String> Status, string CreatedFromDate, string CreatedEndDate, string ModifiedFromDate, string ModifiedEndDate ) { string methodName = MethodBase.GetCurrentMethod().Name; logger.DebugFormat("BEGIN: {0}()", methodName); try { using (UnitOfWork uow = new UnitOfWork()) { IRepository<ProductKeyInfo> prodKeyInfoRep = new Repository<ProductKeyInfo>("SkodaOA3DB"); IRepository<CBRInfo> cbrInfoRep = new Repository<CBRInfo>("SkodaOA3DB"); var query = (from key in prodKeyInfoRep.Query() join cbr in cbrInfoRep.Query() on key.ProductKeyID equals cbr.ProductKeyID into gj from subcbr in gj.DefaultIfEmpty() where key.OEMPartNumber == PartNumber && (key.ProductKeyStateID == (byte)1 || key.ProductKeyStateID == (byte)2 || key.ProductKeyStateID == (byte)3 || key.ProductKeyStateID == (byte)33) orderby key.ModifiedDate select new { PN = key.OEMPartNumber, PO = key.OEMPONumber, SN = key.ProductKeyID, KeyID = subcbr.SerialNumber, StateID = key.ProductKeyStateID, CDate = key.CreatedDate, MDate = key.ModifiedDate }).Distinct(); if (Status.Count > 0) { query = query.Where(p => Status.Contains(p.StateID.ToString())); } if (CreatedFromDate.ToString() != "" && CreatedEndDate.ToString() != "") { DateTime strCF=DateTime.ParseExact(CreatedFromDate,"yyyy-MM-dd hh:mm",null); DateTime strCE=DateTime.ParseExact(CreatedEndDate,"yyyy-MM-dd hh:mm",null); query = query.Where(p => p.CDate >= strCF).Where(p => p.CDate <= strCE); } if (ModifiedFromDate.ToString() != "" && ModifiedEndDate.ToString() != "") { DateTime strMF=DateTime.ParseExact(ModifiedFromDate,"yyyy-MM-dd hh:mm",null); DateTime strME=DateTime.ParseExact(ModifiedEndDate,"yyyy-MM-dd hh:mm",null); query = query.Where(p => p.MDate >= strMF).Where(p => p.MDate <= strME); } return query; }
romanchaos 2014-08-23
  • 打赏
  • 举报
回复
方法要返回的是IQueryable<DataTable>,可你的query是一个实现了IQueryable的匿名类。通常匿名类不会用于这种方式的方法传参,你要定义一个自定义类,然后方法返回的是IQueryable<自定义类>,而query的select改为select 自定义类

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧