我道歉但在阅读了2篇建议的文章后,我仍然不明白我应该使用什么。我明白使用IQueryable并不是因为各种原因而不是首选,但这样做也会消除IEnumerable吗? DataTable真的是我最好的选择吗?
简而言之,我猜,首选的返回类型是什么?
我有以下简单的LINQ查询,我想将其抽象为DAL。什么是var的类型,因此我的方法应该是什么类型?
ConnectDBDataContext context = new ConnectDBDataContext();
var lName = textEdit1.Text;
var searchByPersonLName = from c in context.tblPersons
where c.LastName == lName
orderby c.LastName
select new { c.FirstName,c.LastName,c.PersonID};
dataGridView1.DataSource = searchByPersonLName;
当我将鼠标悬停在VS上时,它会显示IQueryable<T>
,但当我输入断点并运行它时,似乎将自己称为IEnumerable。哪个是正确的,我应该如何申报我的方法?
喜欢这个 - &gt;
public static DataTable SearchPerson(string SearhParam)
{
ConnectDBDataContext context = new ConnectDBDataContext();
var persons = (from person in context.tblPersons
orderby person.LastName
select new { person.PersonID, person.LastName, person.FirstName, person.SSN });
var filteredPersonsList = persons.Where(p => p.LastName == SearhParam).ToList();
if (filteredPersonsList.Count == 0)
filteredPersonsList = persons.Where(p => p.LastName.StartsWith(SearhParam)).ToList();
var dataTable = filteredPersonsList.CopyLinqToDataTable();
return dataTable;
}
如果我使用IQueryable<T>
什么是<T>
,或者我如何知道这些以及我将返回什么内容?
谢谢!
作为参考,CopyToDataTable()位于下方。
public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source)
{
return new ObjectShredder<T>().Shred(source, null, null);
}
public static DataTable CopyLinqToDataTable<T>(this IEnumerable<T> source,
DataTable table, LoadOption? options)
{
return new ObjectShredder<T>().Shred(source, table, options);
}
答案 0 :(得分:3)
首先,IQueryable实现IEnumerable,这就是为什么你可能会看到两者。见here for more details
一般情况下,我会建议您的DAL尽可能返回实际对象。
我会read this blog获取有关如何以及如何不按照您的建议行事的指导原则。简短的回答,不要回归IQueryable。
编辑: 例如:
internal static File[] GetAllFilesByUserID(int userID)
{
var db = GetDataContext();
return (from files in db.Files where files.OwnerUserID == userID select files).ToArray();
}
答案 1 :(得分:2)
他的意思是将您的数据映射到您希望DAL返回的对象。
在回答你的第一个问题时,“var”实际上只是变量的缩写,而类型是赋值中定义的类型。
var myvariable = string.empty;
在此示例中,类型是字符串的类型。
var myreader = new StringReader();
在此示例中,类型是StringReader的类型。
关于你的第二个问题是什么。 T是通用类型。
有关dal将返回实际对象的示例:
public Product GetProduct(int ProductID)
{
var product = from p in db.MyTable
where p.productID == ProductID
select new product { name = p.name, pricepoint = p.pricepoint, qty = p.quantity };
return product;
}