我如何使用第二个表达式来选择只有那些ID从第一个?lambda扩展来组合列表
var list1= from x in objects select x.id;
results=results.Where(r=>r.id== ???? )
我想要的结果是只有那些ID从listA的
TIA
编辑:我站在纠正,还有一个问题引起的问题,我会询问分开。
我如何使用第二个表达式来选择只有那些ID从第一个?lambda扩展来组合列表
var list1= from x in objects select x.id;
results=results.Where(r=>r.id== ???? )
我想要的结果是只有那些ID从listA的
TIA
编辑:我站在纠正,还有一个问题引起的问题,我会询问分开。
猜测的位(没试过运行的话),但是:
var filteredResults = from obj in objects
join result in results on obj.id equals result.id
select result;
请注意,这应该代替你在你的问题中的代码行。
results = results.Where(r => list1.Contains(r.id));
如果你想要一些性能(list.Contains()有一个O(n)的复杂性),你可以用
var ids = objects.ToDictionary(o => o.id);
results.Where(o => ids.ContainsKey(o.id));
这给了一个错误。这应该与linqtosql一起工作? – zsharp 2009-06-04 20:54:35
呃,没有这是Linq只有对象。如果你希望它在SQL中通过lin翻译成sql,你应该在问题中(和标签中)指定它。 此外,如果您说出了确切的错误,那将会很有帮助。 – 2009-06-04 20:58:17
也许去你想要这个吗?
results.Where(R => objects.Any(O => o.id == r.id))
如果你总是只需要第一个元素的ID,你可以将其存储到变量,用它来lambda表达式
var results= from x in objects select x.id;
int firstID = results.First().id ;
results=results.Where(r=>r.id== firstID )
或者,直接使用这样的:
var results= from x in objects select x.id;
results=results.Where(r=>r.id== results.First().id )
这也适用,但我想知道哪一种效率更高? – zsharp 2009-06-04 20:53:44