3

我将如何在动态 linq 中编写此查询?我知道如何做选择,但我怎么做“让”?

var qry = from sr in data.Addresses
                  let AddressType_Desc = sr.AddressType.AddressType_Desc
                  let Country_Desc = sr.Country.Country_Desc
                  where sr.Customer_GUID == CustomerGuid
                  select new
                             {
                                 sr.Address_GUID,
                                 sr.People_GUID,
                                 sr.AddressType_GUID,
                                 AddressType_Desc,
                                 sr.Address1,
                                 sr.Address2,
                                 sr.City,
                                 sr.State,
                                 sr.Zip,
                                 sr.County,
                                 sr.Country_GUID,
                                 Country_Desc,
                                 sr.UseAsMailing
                             };
4

1 回答 1

4

在 linq 表达式方法语法中没有等价物,let动态 LINQ中也是如此。

Let只能帮助您使查询更具可读性。它只是作为别名或局部变量工作。您可以想象,在方法语法中,您将无法在声明它的方法范围之外访问它。

在您的情况下,只需将let变量启动放入select.

像这样在 linq 方法语法中:

var qry = data.Adresses.Where(sr => sr.Customer_GUID == CustomerGuid)
                       .Select(sr => new {
                                            sr.Address_GUID,
                                            ....

                                            sr.AddressType.AddressType_Desc, 
                                            sr.Country.Country_Desc
                                         });

或与动态 LINQ 类似(选择子句 as string):

var qry = data.Adresses.Where(sr => sr.Customer_GUID == CustomerGuid)
                       .Select("new (Address_GUID, AddressType.AddressType_Desc, Country.Country_Desc)");

您将获得与使用 linq 查询语法相同的结果。

其他表达方法也类似。您唯一需要的就是直接使用该值而不是let别名。

于 2013-02-10T22:43:46.717 回答