Tag: linqpad

Linq查询使用null但不是int? 在where子句中

我有一个linq查询函数,如(简化): public IList ListDocuments(int? parentID) { return ( from doc in dbContext.Documents where doc.ParentID == parentID select new Document { ID = doc.ID, ParentID = doc.ParentID, Name = doc.SomeOtherVar }).ToList(); } 现在由于某种原因,当我为parentID传递null(当前只有具有null parentID的数据)时,我没有得到任何结果。 我将此查询复制并粘贴到LinqPad中并运行以下命令: from doc in dbContext.Documents where doc.ParentID == null select doc 我按预期收回结果集… 实际的查询已经离开了连接和其他连接,但我已经删除它们并测试它并得到相同的结果,因此连接不会影响任何东西。 该应用程序和LinqPad也连接到同一个数据库。 编辑:在应用程序查询中仅使用“null”进行测试,并按预期返回结果,因此问题是使用null vs int?。 我已经更新了问题,使其对具有相同问题的其他人更有用,可以找到这个post。

如何在LinqPad中转储()一个Newtonsoft JObject?

在LinqPad中,尝试在Newtonsoft JSON.Net JObject上调用.Dump() JObject产生exception: RuntimeBinderException:’Newtonsoft.Json.Linq.JObject’不包含’转储’的定义。 这适用于LinqPad中的几乎所有其他内容。 我想找出一个方法,它将转储一个Newtonsoft JObject ,就像其他对象一样,显示属性名称,值等。 我已经想出如何让它转储JSON字符串,但我希望看到一个对象得到输出而不仅仅是一个文本字符串。

使用LinqPad将字符串转换为Guid

当我在LinqPad中运行以下时 var ProductIds = from p in Products where p.Id = “F1FE990C-4525-4BFE-9E2C-A7AFFF0DDA1F” select p; ProductIds.Dump(); 它给了我 无法将类型’string’隐式转换为’System.Guid’ 我只是不知道如何适当地将它投射到GUID我猜

如何让LINQPad转到Dump()系统.__ ComObject引用?

我正在使用LINQPad来快速开发小型ArcObjects (一个基于COM的ESRI ArcGIS软件库)应用程序,并且已经成功地将它用于Dump()我从.NET初始化的COM对象的属性,但是从现有COM对象获取的COM对象只是作为System.__ComObject引用转储,这不是特别有用: 这个帮助主题解释了为什么会发生这种情况,我认为我理解,但是想知道解决这种行为有哪些选择,特别是在使LINQPad(甚至)更强大的环境中。 有趣的是,Visual Studio的调试器能够显示这些对象的属性,甚至是值类型的值: Visual Studio使用什么机制来实现这种内省,为什么LINQPad的Dump方法不会这样做呢? 编辑:请参阅有关VS如何执行此操作的相关问题: Visual Studio的调试器/交互式窗口如何在.NET中转储COM对象的属性? ArcObjects .NET SDK包含带有RCW的PIA,每个CoClass可以通过COM接口实现,所以我认为应该可以以编程方式包装这些对象。 作为一种解决方法,我在LINQ查询中成功使用Marshal.CreateWrapperOfType()来强制LINQPad在我碰巧知道应该使用哪个CoClass时转储对象的属性。 当然,这只能正确转储值类型属性 – 任何基于COM的引用类型属性仍然报告为System.__ComObject ,因此正确的解决方案必须以递归方式工作以获取那些包装。 在之前的一个问题中,我了解到CoClass可以在运行时确定它是否实现了IPersist ,这是ArcObjects的很大一部分。 我可以以某种方式使用这种技术或其他技术自动将System.__ComObject从PIA System.__ComObject为适当的RCW吗? 如果是这样,我如何在LINQPad中实现它,例如通过提供ICustomMemberProvider实现? 这可以是递归的,这样也可以包装也是COM对象的属性吗? 我正在使用面向.NET 4.0的LINQPad 4.x,但我也对支持LINQPad 2.x感兴趣(因此,首选适用于.NET 3.5和.NET 4.0的解决方案,但这不是必需的)。 更新:我已经弄清楚我的问题的第一部分是如何使用IPersist.GetClassID返回的CLSID在其RCW中包装System.__ComObject 。 请参阅此相关问题和我正在使用的代码的答案 。 我仍然想知道如何将其用于LINQPad的Dump方法。

entity framework包含命令 – 左连接还是内连接?

在我调查Include和Join之间的区别时,我发现: 如果数据库不包含外键 – 它没有导航道具,所以最好使用Join 如果它确实有导航道具 – 那么使用Include 。 (它还可以节省数据库命中率。) 但这里的一个答案引起了我的注意: Include实现为连接。 根据所包含链接的可为空性 ,它是内部或左侧连接。 题 : 无效如何影响左/内连接? 在Sql server中我可以有一个Cities表和Persons表,一个人可以有一个NULL CityID 。 为什么entity framework会为我决定它是什么类型的连接? 编辑:可视化: 现在让我们将CityId更改为null: 这是变化:

使内部类对其他程序集可见

将我的程序集中的内部类对其他程序集可见是否真实? 我知道AssemblyInfo文件和 [assembly: InternalsVisibleTo()] 属性。 但它在我的情况下不起作用。 这样做的主要目的是使LINQPAD成为可能的调用方法。 所以这个[assembly: InternalsVisibleTo(“LINQPad”)]不起作用。 我不知道为什么。 在我的项目中,我使用依赖解析器,在linqpad中很难做到这一点。 有什么建议吗?

Linq明显无法正常工作

我遇到了一个linq查询的奇怪问题。 我正在使用LINQPad 4进行一些使用LinqToSQL作为LinqPad驱动程序的正则表达式的查询。 这是我正在尝试的查询: (from match in from s in SystemErrors select Regex.Match(s.Description, “…”) select new { FamilyCode = match.Groups[“FamilyCode”].Value, ProductPrefix = match.Groups[“ProductPrefix”].Value, BillingGroup = match.Groups[“BillingGroup”].Value, Debtor = match.Groups[“Debtor”].Value }).Distinct() 正如您所看到的,我正在尝试使用组从日志表中的文本描述中提取数据。 查询有效,但Distinct不想工作,它返回所有Match的一行。 我已经读过,distinct应该使用匿名类型,匹配每个属性。 更奇怪的是,distinct确实做了一些事情,它通过FamilyCode(然后是ProductPrefix等)按字母顺序排序值。 有人知道为什么这不起作用? 谢谢 以下是LinqPad的SQL选项卡中显示的内容: DECLARE @p0 NVarChar(1000) = ‘Big Regexp’ DECLARE @p1 NVarChar(1000) = ‘FamilyCode’ DECLARE @p2 NVarChar(1000) = ‘ProductPrefix’ DECLARE @p3 […]

LINQPad如何编译代码?

我猜它既没有调用csc.exe也没有实现整个编译器,所以它是如何工作的? 更新:感谢Jon Skeet指向易于学习的代码。 string c = @” public class A { public static void Main(string[] args) { System.Console.WriteLine(“”hello world””); } } “; CodeDomProvider compiler = new CSharpCodeProvider(); CompilerParameters parameters = new CompilerParameters(); parameters.WarningLevel = 4; parameters.GenerateExecutable = false; parameters.GenerateInMemory = true; CompilerResults r = compiler.CompileAssemblyFromSource(parameters, c); Assembly a = r.CompiledAssembly; Type[] ts = a.GetTypes(); Type […]

Visual Studio中的LINQPad

public static class Extensions{ public static void Dump(this T o) { } public static void Dump(this T o, string s) { }} 这些行允许我将代码从LINQPad复制到VS并运行它而不用.Dump()注释每一行但是这还不够…… http://code.google.com/p/linqpadvisualizer/ – 不太舒服: ( 我在VS中搜索LINQPad的最佳结果是这个网站 ,下面是Pat Kujawa的代码。 using System.Diagnostics; using System.IO; public static class Extensions { public static void Dump(this T o) { string localUrl = Path.GetTempFileName() + “.html”; using (var writer […]

LINQ表达式语法如何与Include()一起用于预先加载

我在下面有一个查询,但我想对eager load属性执行Include()。 Actions有一个导航属性,User(Action.User) 1)我的基本查询: from a in Actions join u in Users on a.UserId equals u.UserId select a 2)第一次尝试: from a in Actions.Include(“User”) join u in Users on a.UserId equals u.UserId select a 但是没有填充Action.User。 3)尝试将’User’加载到查询之外的导航属性中: (from a in Actions join u in Users on a.UserId equals u.UserId select a).Include(“User”) 在LINQPad尝试包含的我得到一个错误: ‘System.Linq.IQueryable’不包含’Include’的定义,也没有扩展方法’Include’接受类型’System.Linq.IQueryable’的第一个参数可以找到(按F4添加using指令或程序集引用) 我认为这是因为LINQ不支持Include()。 所以我在VS中尝试过; 查询2运行,但返回未填充的用户属性。 查询3扩展方法似乎不存在,虽然它确实存在于Action本身而没有查询。