c# - 如何在动态 LINQ 中执行 "let"?

标签 c# linq linq-to-entities dynamic-linq

如何在动态 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
                             };

最佳答案

在 linq 表达式方法语法和 dynamic LINQ 中没有与 let 等价的东西.

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(select 子句为 string):

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

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

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

关于c# - 如何在动态 LINQ 中执行 "let"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799803/

相关文章:

c# - 在WAV记录中读取通过 radio 发送的二进制代码

c# - 'namespace' 但像 'type' 一样使用

C# LINQ 通过比较键合并字典

c# - Linq to Entities : see the resulting query (context. Log = Console.Out)

c# - Linq to Entities - 将 string[] 中带有 TagID 的所有对象插入 ICollection<Tag>

c# - ListBox ItemTemplate 中的按钮未选择项目

c# - 为什么 Code First 类需要导航属性?

sql - ASP MVC Lambda 表达式或查询扩展?

c# - 以非对称方式合并两个 Dictionary<string, string>

c# - 为什么 C# convertall 需要 2 个参数