搜索并选择具有linq / lambda表达式的倍数

时间:2014-01-07 21:31:46

标签: c# sql entity-framework

我目前有以下代码:

var FirstNameList = db.Clients.Include(x => x.FirstNames).Include(x => x.Addresses).SelectMany(a => a.FirstNames).Where(x => x.Name.ToLower().Trim() == "Max".ToLower().Trim()).ToList();

我有一个FirstNames和Addresses的导航属性,我将其包含在结果中。

我使用SelectMany语句,因为对我来说,它是唯一有效的语句。的种类。它返回Name等于Max的所有FirstNames。

我希望它能够从表FirstNames中返回所有具有Name等于Max属性的客户端。

我想到的另一种方法是从FirstNameList返回所有ID,然后通过查询FirstNameList的数据返回客户端,但我会再查询数据库两次,这似乎效率低下。

我的问题是它是否可能,如果有的话,我将如何查询数据库以返回我的客户端?

亲切的问候

1 个答案:

答案 0 :(得分:0)

以下查询应该可以为您提供所需内容。您可以查看每个客户端的FirstNames,看看它们中是否有任何名称为“max”。 (在这种情况下,由于“max”是你输入的常量,我删除了ToLower()。从中修剪()

var clientsNamedMax = db.Clients.Include(x => x.FirstNames).Include(x => x.Addresses).Where(x => x.FirstNames.Any(y => y.Name.ToLower().Trim() == "max")).ToList();