我有两个表:baswareCatalog.FlowCurrent和baswareCatalog.Doc。 它们都包含属性DocId。 Doc-table还具有LastExpireDate和Status属性。 FlowCurrent-table还具有RecipientName属性。 我想要检索Doc的集合,其中两个表中的项目的DocId是相同的。
此外,此条件必须为true:flowCurrent.RecipientName.Contains(userFullName)
我尝试了以下内容,但我不知道它是否正确。
var docitemIQueryable = from flowCurrent in baswareCatalog.FlowCurrent join
document in baswareCatalog.Docs on
flowCurrent.DocId equals document.DocId
where flowCurrent.RecipientName.Contains(userFullName)
select new
{
Items = baswareCatalog
.Docs
.Where(b => b.DocId == flowCurrent.DocId)
};
返回值是
'interface System.Linq.IQueryable<out T>'.
T is 'a'
Anonymous Types: 'a is new {IQueryable<Doc> Items }'
如何检索可以迭代的Doc集合?
答案 0 :(得分:1)
如果不了解您的表结构,您的查询看起来还不错。选择&#39;选择&#39;你有两个表加入并受where子句限制。
在select new中,您可以为新对象分配要包含的原始表中的任何属性。
select new
{
DocId = flowCurrent.DocId,
LastExpireDate = document.LastExpireDate,
//etc
}
如果您只想获取doc项目,可以执行此操作
var docitemIQueryable = from flowCurrent in baswareCatalog.FlowCurrent join
document in baswareCatalog.Docs on
flowCurrent.DocId equals document.DocId
where flowCurrent.RecipientName.Contains(userFullName)
select document;
然后你会有一个可疑的文件
答案 1 :(得分:1)
两件事:
System.Linq.IQueryable
是一个可以迭代的集合。您可以将其放在foreach
循环中,也可以随意使用它。或者,如果您想立即实现它,可以使用.ToList()
。FlowCurrent
和Docs
之间进行联接,但之后您将获得结果并再次返回Docs
。你不需要这样做。假设您关心的只是Docs
中的内容,请尝试以下方法:
var docitemIQueryable = from flowCurrent in baswareCatalog.FlowCurrent
join document in baswareCatalog.Docs on
flowCurrent.DocId equals document.DocId
where flowCurrent.RecipientName.Contains(userFullName)
select document;
这将为您提供包含Docs
中所有字段的行集合。如果您需要FlowCurrent
中的某些内容,那么您需要做更多类似的事情:
var docitemIQueryable = from flowCurrent in baswareCatalog.FlowCurrent
join document in baswareCatalog.Docs on
flowCurrent.DocId equals document.DocId
where flowCurrent.RecipientName.Contains(userFullName)
select new {
document.DocId, flowCurrent.blahblah, ...
};
答案 2 :(得分:0)
结果是items属性中的一系列对象,因此您需要嵌套循环或SelectMany
foreach(var item in docitemIQueryable.SelectMany( x=> x.Items)){
//do something
}
然而,似乎你的内部选择只返回一个元素,在这种情况下你可以跳过匿名类型对象,只需选择如下所示
select document;
并简化循环到
foreach(var item in docitemIQueryable){
//do something
}