C# 关于使用具有LinqToSql的类的查询
我想将以下代码单独放入一个类中,以便可以重用它:C# 关于使用具有LinqToSql的类的查询,c#,asp.net,linq-to-sql,C#,Asp.net,Linq To Sql,我想将以下代码单独放入一个类中,以便可以重用它: var activePersons = (from p in _dataContextOrders.Persons select new { p.ID, p.WindowsUserID,
var activePersons = (from p in _dataContextOrders.Persons
select new
{
p.ID,
p.WindowsUserID,
p.Name,
p.CommonShortName,
p.TeamID,
p.Telephone,
p.Fax,
p.Email,
p.FMSBudgetOfficerID,
p.Active
}).Where(p => p.Active).OrderBy(p => p.CommonShortName);
所以我可以返回对象activePersons。我想用这个来代替所有这些:
var activePersons = DataAccessLayer.ActivePersons.GetActivePersons();
但在下一页,我有:
var currentUser = activePersons.SingleOrDefault(p => p.WindowsUserID == strWindowsSessionUserId);
现在返回一个编译错误。有办法解决这个问题吗?出现错误的原因是您在查询中使用
new
关键字选择了匿名对象。您无法从方法返回匿名对象,因此我猜您正在返回object
。现在,对于您的方法调用方,它是一个对象
类型对象,并且它不会公开查询中选择的所有属性(并且您无法将其转换为类型,因为您不知道该类型),因此会出现错误
需要创建一个新类,该类包含所有属性,并从方法返回IEnumerable
有一种方法,但他不推荐
定义一个类,如:
class ReturnedObject
{
public int ID { get; set; }
public string WindowsUserID { get; set; }
//..... rest of the properties
}
然后在您的查询中:
var activePersons = (from p in _dataContextOrders.Persons
select new ReturnedObject
{
ID = p.ID,
WindowsUserID = p.WindowsUserID,
//rest of the properties
在方法中,将返回类型指定为:
public IEnumerable<ReturnedObject> GetActivePersons(//parameters
public IEnumerable GetActivePersons(//参数
您会遇到什么错误?您接受了错误的答案。如果您对该问题使用了正确的答案,您就不会处于这种情况。谢谢您的帮助。我最终成功了。大家都可以干编程了!!@Stevestamp,不客气,但您接受了关于类似主题的先前问题的答案。