举个例子,假设你有一个像这样的课程
**Person**
int PersonID
string PersonName
BusinessLocation Locations
**BusinessLocation**
string city
string state
List<int> ZipCodes
(说这些位置可能存在多个zipcodes)
(也忽略了zipcodes应该是字符串而不是整数,这只是一个例子)
假设企业的位置存在多个邮政编码。
现在我试图在给出商业邮政编码的情况下撤回人员表中的所有人。
例如,我希望所有邮政编码为32567的人。
(鉴于ID列表,这是有效的,我正在尝试相反,给定一个ID,我想要一个人的列表)
public Person GetPersonsByBusinessZipCode(int zipcode)
{
List<Person> personList =
this.GetAllQueryable().Where(
x => x.Locations.ZipCodes.Contains(zipcode)).ToList();
}
这是在Fluent中映射的。
HasMany<int>(x => x.ZipCodes)
.Table("BusinessLocationsZipCodes")
.KeyColumns.Add("BusinessLocationID")
.Inverse()
.Element("ZipCode")
.AsBag()
.Cascade.None()
.Cache.ReadOnly();
BusinessLocationZipCodes只是一个参考表,暗示BusinessLocation可以有多个ZipCodes,因此是HasMany。
知道反向工作,如果给我一个ZipCodes列表,我试图找到包含在zipcodes列表中的BusinessLocations(只要映射是一个zipcode而不是一个zipcodes列表)。现在我只想找到一个邮政编码的商业地点。
如果有人有答案,我将不胜感激。
答案 0 :(得分:0)
答案 1 :(得分:-1)
只要您使用System.Linq.Queryable和IQueryable接口,Linq提供程序就不重要了。
我相信您正在寻找Queryable.Any方法。
Persons.Where(p => p.Locations.ZipCodes.Any(z => z == zipCode))
或者,如果您的人员有很多地点:
IQueryable<Person> query =
from p in Persons
where
(
from l in p.Locations
from z in l.ZipCodes
select z
).Any(z => z == zipCode)
select p;
答案 2 :(得分:-1)
有什么例外?这应该可以使用最新的NHibernate版本(2.1.2.400)正常工作。
//以下查询:(不要介意西班牙语)
var transporte = // some entity;
var solicitud = IQueryable<Solicitud>
.Where(x => x.SolicitudesDeTransporte.Contains(transporte)).ToList();
生成:
SELECT this_.Id as Id6_0_,
/* etc... */
FROM Solicitud this_
WHERE this_.Id in (SELECT this_0_.Id as y0_
FROM Solicitud this_0_
left outer join Solicitud_Transporte solicitude1_
on this_0_.Id = solicitude1_.Id_Solicitud
WHERE solicitude1_.Id = 1 /* :p0 */)