我试图搜索SO以寻找与我的情况类似的解决方案和问题。
我有两个对象集合:
public class BRSDocument
{
public string IdentifierValue { get; set;}
}
public class BRSMetadata
{
public string Value { get; set;}
}
我从数据层填充列表:
List<BRSDocument> colBRSDocuments = Common.Instance.GetBRSDocuments();
List<BRSMetadata> colBRSMetadata = Common.Instance.GetMessageBRSMetadata();
我现在想在colBRSDocuments中找到一个对象,其中x.IdentifierValue等于colBRSMetadata y.Value中的一个对象。我只需要找到与BRSMetadata对象中的值匹配的BRSDocument。
我使用普通的foreach循环和简单的linq搜索来查找数据并在找到值时中断。我想知道是否可以使用linq完全完成搜索?
foreach (var item in colBRSMetadata)
{
BRSDocument res = colBRSDocuments.FirstOrDefault(x => x.IdentifierValue == item.Value);
if (res != null)
{
//Do work
break;
}
}
希望你们中的一些人能够把我推向正确的方向......
答案 0 :(得分:2)
为什么不加入?
var docs = from d in colBRSDocuments
join m in colBRSMetadata on d.IdentiferValue equals m.Value
select d;
如果只是一个人就可以做到:
var doc = docs.Single(); // will throw if there is not exactly one element
如果要返回两个对象,则可以执行以下操作:
var docsAndData = from d in colBRSDocuments
join m in colBRSMetadata on d.IdentiferValue equals m.Value
select new
{
Doc = d,
Data = m
};
然后您可以访问:
foreach (var dd in docsAndData)
{
// dd.Doc
// dd.Data
}
答案 1 :(得分:0)
使用Linq? 这样的事情应该可以胜任:
foreach (var res in colBRSMetadata.Select(item => colBRSDocuments.FirstOrDefault(x => x.IdentifierValue == item.Value)).Where(res => res != null))
{
//Do work
break;
}
如果您只对第一项感兴趣,那么代码将是:
var brsDocument = colBRSMetadata.Select(item => colBRSDocuments.FirstOrDefault(x => x.IdentifierValue == item.Value)).FirstOrDefault(res => res != null);
if (brsDocument != null)
//Do Stuff