我喜欢Linq但是我很喜欢它,我似乎总是忘记如何使用它。 我搜索但似乎无法找到合适的答案。 这是我的问题
我有两个表table_2有table_1的外键
table_1
----------
- userID
- Name
tabel_2
----------
- userID
- ownID
- codeKey
现在我有一个对象(用户)我想填充userId和name_2以及table_2中所有userID行的ObservableCollection
对象样本:
public class User
{
public string Name { get; set; }
public long UserID { get; set; }
public ObservableCollection<Message> Messages { get; set; }
}
public class Message
{
public string CodeKey { get; set; }
public long OwnID { get; set; }
public long UserID { get; set; }
}
我尝试过以下操作;它有效但不确定这是否是正确的做法:
var request = from tb1 in db.table_1
select new User()
{
Name = tb1.Name,
UserID = tb1.UserID,
Messages = new ObservableCollection<Message>(
from tb2 in db.table_2
where tb2.UserID == tb1.UserID
select new SmsMessage()
{
CodeKey=tb2.CodeKey,
OwnID = tb2.ownID,
UserID = tb2.UserID
})
};
return new ObservableCollection<User>(request);
感谢您的帮助和时间。
答案 0 :(得分:2)
你可以用更简单的方式做到这一点。如果您的实体是使用这些关系创建的,那么您应该可以执行以下操作:
var query = from tb1 in db.table_1.Include("table_2")
select tb1;
查询将是一个带有对象列表的IEnumerable,每个对象都包含table_1数据和一个属性及其对应的table_2对象。
因此,您可以使用简单的foreach循环填充用户集合。
如果您只想使用linq查询,可以尝试使用以下内容:
var request = from tb1 in db.table_1.Include("table_2")
select new User()
{
Name = tb1.Name,
UserID = tb1.UserID,
Messages = tb1.table_2;
};
return new ObservableCollection<User>(request);
从未尝试过,所以我不确定这个解决方案8 - )