如何在以下类中返回FirstName和Surname?
public static string GetAccount(int AccountId)
{
LinqSqlDataContext contextLoad = new LinqSqlDataContext();
var q = (from p in contextLoad.MyAccounts
where p.AccountId == AccountId
select new { Name = p.FirstName, Surname = p.Surname }).Single();
return ??;
}
答案 0 :(得分:6)
您可以返回强类型类,动态对象或元组。 我更喜欢返回一个强类型的类。
使用dynamic
类型的问题是你没有得到
仅在运行时的intellisense和exception。
元组的问题在于它没有告诉你什么 你回来了。您或其他开发人员必须阅读该方法 要知道姓名和姓氏是什么。
public class MyResult
{
public string Name { get; set; }
public string Surname { get; set; }
}
public static MyResult GetAccount(int AccountId)
{
LinqSqlDataContext contextLoad = new LinqSqlDataContext();
var q = (from p in contextLoad.MyAccounts
where p.AccountId == AccountId
select new MyResult{ Name = p.FirstName, Surname = p.Surname }).Single();
return q;
}
我建议使用SingleOrDefault
代替Single
。这将确保你
如果帐户不存在而不是抛出异常,则获得null
结果。
//
select new MyResult{ Name = p.FirstName, Surname = p.Surname }).SingleOrDefault();
//
答案 1 :(得分:4)
如果您不想为返回类型定义新对象,可以使用Tuple<string, string>
。
答案 2 :(得分:1)
通过引用传入两个对象,您可以设置它们。
改为使其成为一个尝试函数,作为较少代码气味版本的例子
public static bool TryGetAccount(int AccountId, out String FirstName, out String Surname)
{
LinqSqlDataContext contextLoad = new LinqSqlDataContext();
var q = (from p in contextLoad.MyAccounts
where p.AccountId == AccountId
select new { Name = p.FirstName, Surname = p.Surname }).SingleOrDefault();
FirstName=(q==null) ? null: q.Name;
Surname=(q==null) ? null: q.Surname;
return q!=null;
}
现在你可以做到
string firstName;
string surname;
if (TryGetAccount(id, out firstName,out surname)) {
// firstName now equals the first name and surname now equals the surname
} else {
// Deal with value not found
}
答案 3 :(得分:1)
另一个(不是最好:))选项是返回一个数组:
public static string[] GetAccount(int AccountId)
{
LinqSqlDataContext contextLoad = new LinqSqlDataContext();
var q = (from p in contextLoad.MyAccounts
where p.AccountId == AccountId
select new { Name = p.FirstName, Surname = p.Surname }).Single();
return new []{q.Name, q.Surname};
}
答案 4 :(得分:0)
如果您使用.Net 4,则可以返回动态而不是字符串,并直接从返回的对象中获取这两个值。
答案 5 :(得分:0)
如果您不介意以这种方式使用retunred类型,将它返回Tuples怎么样tuple.Item1,tuple.Item2
答案 6 :(得分:0)
您可以使用Hashtable来逃避创建新的结果类。 像这样:
public static Hashtable GetAccount(int AccountId)
{
LinqSqlDataContext contextLoad = new LinqSqlDataContext();
var q = (from p in contextLoad.MyAccounts
where p.AccountId == AccountId
select new { Name = p.FirstName, Surname = p.Surname }).Single();
return new Hashtable(q.FirstName, q.Surname);
}
您可以通过FirstName作为密钥来获取姓氏。