我在数据库中有字母和用户表:
User("Id", "Name")
Letter("Id", "UserId", "Title")
我在课堂上使用此代码获取字母列表:
public static mytype GetList()
{
var lst = (from l in Letters.ToList()
select new {l.Id, l.Title, l.tblUsers.Name}).ToList();
return lst;
}
请帮我选择合适的类型。我不想使用这段代码:
public static List<Letter> GetList()
{
List<Letter> lst = new List<Letter>();
lst = (from l in Letters.ToList()
select l).ToList();
return lst;
}
答案 0 :(得分:1)
您需要为此定义类型。
new {l.Id, l.Title, l.tblUsers.Name}
是匿名类的定义。要将其用作返回值,您应定义struct
或class
,表示您要返回的信息。您可以使用dynamic
,但在更改返回的数据结构时很容易导致运行时错误,因为方法的调用者不知道返回值的样子。
例如:
struct UserLetter {
public Guid Id {get;set;}
public string Title {get;set;}
public string AuthorName {get;set;}
}
public static IList<UserLetter> GetList()
{
return (from l in Letters
select new UserLetter
{ Id = l.Id, Title = l.Title, AuthorName = l.tblUsers.Name}).ToList();
}
答案 1 :(得分:0)
您正在创建一个匿名类型,因此您可以创建一个包含您感兴趣的属性的新类或使用动态对象
public static IEnumerable<dynamic> GetList()
{
var lst = (from l in Letters.ToList()
select new {Id = l.Id, Title = l.Title, UserName = l.tblUsers.Name}).ToList();
return lst;
}
然后在你的调用代码中迭代动态对象并调用动态属性
foreach (var dynamicObject in GetList())
{
Console.WriteLine(dynamicObject.UserName);
}
除非您的动态对象在您的应用程序中具有非常小的范围,否则新类可能是更好的选择,因为您将从类型检查中受益
答案 2 :(得分:0)
试试这个
class mytype
{
public int id;
public string title;
public string name;
}
public static List<mytype> GetList()
{
return (from l in Letters.ToList() select new mytype{id=l.Id,title=l.Title, name=l.tblUsers.Name}).ToList();
}
答案 3 :(得分:0)
您需要使用用户表应用联接。
public static List<objLetter> GetList()
{
List<objLetter> lst = new List<objLetter>();
lst = from ltr in Letters
join user in Users on ltr.UserId equals user.UserId
select new objLetter {Id = ltr.Id , Title = ltr.Title, Name = user.Name })
return lst;
}