您可以通过如下建立一个表达式树写这样的方法以表示列;您可以将其更改为在Visual Studio中生成的DataContexts的GetProperties)。
我们需要创建一个表达式,将这些字段提供给一个string.Concat语句。当后者接受一个字符串数组时,我们创建一个NewArrayInit表达式来构建数组。
接下来,我们调用Concat方法将字符串连接在一起,最后使用string.Contains方法来测试字符串是否在我们构建的表达式中。
下面是方法上的AdventureWorks运行:
void Main()
{
Addresses.Where (AnyColumnContains<Address> ("Seattle")).Dump();
}
LAMBDA翻译:
Addresses
.Where (
entity =>
String
.Concat (new String[] { entity.AddressLine1, entity.AddressLine2,
entity.City, entity.PostalCode })
.Contains ("Seattle")
)
SQL翻译:
-- Region Parameters
DECLARE @p0 NVarChar(1000) = '%Seattle%'
-- EndRegion
SELECT [t0].[AddressID], [t0].[AddressLine1], [t0].[AddressLine2], [t0].[City],
[t0].[StateProvinceID], [t0].[PostalCode], [t0].[rowguid] AS [Rowguid],
[t0].[ModifiedDate]
FROM [Person].[Address] AS [t0]
WHERE ((([t0].[AddressLine1] + [t0].[AddressLine2]) + [t0].[City]) + [t0].[PostalCode])
LIKE @p0
请出示您当前拥有的代码。你有哪张数据结构表? – 2011-05-10 07:14:07
不知道我是否正确理解了你,但是我已经向q添加了一些信息。 – Joe 2011-05-10 07:28:42
从什么情况下'ATable'? LINQ2SQL? EF?一个'DataTable'? ...? – 2011-05-10 07:31:00