亚音速3 Linq连接问题

亚音速3 Linq连接问题,linq,subsonic,subsonic3,Linq,Subsonic,Subsonic3,使用linqtemplates,我尝试使linq语法接近 但是当调用.SingleOrDefault时,我会看到一个黄色的darn屏幕,上面显示: System.NotSupportedException:不支持成员“StateLookupID” 堆栈跟踪在以下位置结束: SubSonic.Linq.Structure.TSqlFormatter.VisitMemberAccess(MemberExpression m) StateLookupID列在数据库中有下划线,是常规的int pk/

使用linqtemplates,我尝试使linq语法接近

但是当调用.SingleOrDefault时,我会看到一个黄色的darn屏幕,上面显示:

System.NotSupportedException:不支持成员“StateLookupID”

堆栈跟踪在以下位置结束:

SubSonic.Linq.Structure.TSqlFormatter.VisitMemberAccess(MemberExpression m) 
StateLookupID列在数据库中有下划线,是常规的int pk/fk


我做错了什么?

显然VisitMemberAccess不知道如何处理从SubSonic.Linq.Structure.TSqlFormatter第152行开始的int、only字符串和datetime。我不知道为什么会在连接上调用它,因为连接通常在int pk/fk或guid之间(如果您愿意)

我最终放弃了linq查询,转而选择了SubSonic.query.Select。以下是我的新代码:

        var query = db.Select.From<CountyLookup>()
            .InnerJoin<StateLookUp>()
            .Where(CountyLookupTable.Name2Column)
            .IsEqualTo(countyName)
            .And(StateLookUpTable.AbbrColumn)
            .IsEqualTo(stateAbbr);

然后调用ExecuteTypedList并将结果映射回我的模型类。像巴塔一样工作。在这种情况下,我只是想使用linq。

当我将属性添加到我的模型中时,出现了这个错误。ASP.Net MVC 1.0中提到的IsValid属性,谢谢Rob。 这个问题我已经时断时续地遇到了,我想我已经把它牢牢地钉在了查询生成器上,它试图为应该用代码而不是TSQL来完成的事情构建一个查询

当它试图生成SQL时,它沿着路径向下,通过VisitMemberAccess在复杂类型(可能是另一个模型)上生成TSQL,但它只知道如何在VisitMemberAccess中对日期时间和字符串执行操作。如果这有点不连贯的话,我很抱歉,但我正在努力想办法解决这个问题


为了解决这个问题,在进行TSQL生成的任何操作之前,都要考虑使用类似LIQKIT的东西。我在一个简单的OrderBy上尝试过这个方法,效果很好,但我还不知道它会对性能产生什么影响。

事实上我收回了这一点,我通过这样做克服了我的问题

Stuff.All.Wherex=>x.Someid==id.ToArray AsQueryable先生 .x=>x.SomeProp.SomeFlag==true


它是积垢,但能起作用。

这似乎仍然是个问题;即在以下简单情况下:

var list = from lang in db.Languages
                       join site in db.SiteConfigLanguages on
                       lang.Code equals site.LanguageCode
                       select lang;
这应该计算为简单SQL,尽管在本例中没有意义:

SELECT Language.* FROM Language LEFT JOIN SiteConfigLanguage ON Language.Code = SiteConfigLanguage.LanguageCode;
它在同一VisitMemberAccess函数中失败,因为在此情况下,语言不是可识别的声明类型,即字符串或日期时间。它与上面提供的@matware描述非常相似,但是听起来好像IsValid成员是纯C代码,而在本例中,lang.code只是对数据库中一列的引用

我目前正在研究变通方法,因为这只是较大的LINQ查询的一部分,对我来说是失败的;如果我发现什么,我会把它贴在这里。否则,是否知道该问题的其他解决方案/解决方法

更新:忽略我在这里;这仅仅是因为我在LINQ语句中缺少了一行简单的代码;您需要确保使用into关键字来完成任务

i、 e


请注意,我还有一个错误,但至少这个特殊的异常被解决了。不幸的是,下一个在System.Linq库中看起来有点糟糕。

StateLookupID是什么数据类型?整数?如果你能发电子邮件subsonicproject@googlegroups模式-我将看看是否可以设置它并使用spelunk。我在查看单元测试,我们做的远远不止这些。hmmz,查看类。cs没有为这些类型定义外键,这意味着什么?StateLookupID对于这两个变量都是int。我将导出模式。谢谢你的帮助,罗布!不,这不应该造成这种情况。另外-确保您使用的是3.0.0.3。如果你是的话,那么我担心的是一个补丁错误,这会很糟糕。我会再检查一遍。肯定是我的github N00B。我一直在看这个帖子。我想我在使用guid时也会遇到同样的错误。谢谢
SELECT Language.* FROM Language LEFT JOIN SiteConfigLanguage ON Language.Code = SiteConfigLanguage.LanguageCode;
    var list = from lang in db.Languages
               join site in db.SiteConfigLanguages on
               lang.Code equals site.LanguageCode into sl
               from siteLang in sl.DefaultIfEmpty()
               select lang;