我一直在尝试让它发挥作用,但我不知道我在这里缺少什么。
我的模特是:
public class User
{
public int id { get; set; }
public string username { get; set; }
public virtual List<UserMeta> usermeta { get; set; }
public User()
{
this.usermeta = new List<UserMeta>();
}
}
public class UserMeta
{
public int id { get; set; }
public string metakey { get; set; }
public string value { get; set; }
public virtual User user { get; set; }
}
我想为metakey ='first_name'
选择metavalue目前这就是我所拥有的及其工作原理:
var user = db.Users.Include("UserMeta");
foreach (var item in user)
{
Console.WriteLine(item.username);
foreach (var item2 in item.usermeta)
{
// check item2.metakey for 'first_name'
}
}
但它不会像这样工作:
var user = from u in db.Users
select u;
foreach (var item in user)
{
foreach (var item2 in item.usermeta)
{
}
}
第二个代码段有什么问题。还有更好的加载方法吗?
答案 0 :(得分:0)
在第二个代码段中,您不包含UserMeta表。
试试这个:
var user = (from u in db.Users select u).Include("UserMeta");
答案 1 :(得分:0)
我在使用EF 6.1.3的控制台应用程序中测试此代码并且没有问题(ef版本不太可能出现问题),请测试此代码或与您的代码进行比较(您的代码不完整)。
class Program
{
static void Main(string[] args)
{
using (var db = new ApplicationContext())
{
var user = from u in db.Users select u;
foreach (var item in user)
{
foreach (var item2 in item.usermeta)
{
Console.WriteLine(string.Format($"{item2.metakey}:{item2.value}"));
}
}
}
Console.ReadKey();
}
}