当前位置: 首页 > 编程语言 > C#

在实体框架中连接两个表分享

时间:2023-04-10 12:03:03 C#

在实体框架中连接两个表执行另一个查询这是我正在使用的查询varfav=fromfavsindb.FAVORITESjoinpinsindb.PINSonnew{favs.USER_ID,favs.PIN_ID}等于new{userId,pins.PIN_ID}intoresfromrinresselectnew{favs.PIN_ID,r.TYPE_ID};但它给了我一个语法错误。连接子句中的表达式类型不正确。调用“GroupJoin”时类型推断失败我用谷歌搜索了这个错误,发现人们总是说确保equals子句中的属性是同一类型,是的,在执行LINQ连接时,所有类型都是不可空的int,类型等号两边必须完全相同,但在查询中,您有USER_ID与userId。修复很简单:varfav=fromfavsindb.FAVORITESjoinpinsindb.PINSonnew{favs.USER_ID,favs.PIN_ID}equals//使用显式命名,所以第一个属性得到的名称是USER_ID而不是userIdnew{USER_ID=userId,pins.PIN_ID}intoresfromrinresselectnew{favs.PIN_ID,r.TYPE_ID};如果使用GroupJoin的流畅语法(由于“into”子句,您实际上在这里做什么,常见的Join类似),这更容易理解为什么这是必要的。签名是:publicstaticIQueryableGroupJoin(thisIQueryableouter,IEnumerableinner,Expression>outerKeySelector,Expression>innerKeySelector,Expression,TResult>>resultSelector)注意outerKeySelector和innerKeySelector必须返回相同类型的TKey(然后通过匹配完成键连接)。要以流畅的方式编写原始连接,您需要:varfav=db.FAVORITES.GroupJoin(inner:inner,//选择器的返回类型不匹配,因此编译器无法//推断类型TKey!outerKeySelector:favs=>new{favs.USER_ID,favs.PIN_ID},innerKeySelector:pins=>new{userId,pins.PIN_ID},resultSelector:(favs,res)=>res.Select(r=>new{favs.PIN_ID,r.TYPE_ID})).SelectMany(res=>res);你可以试试这个:varbalance=(fromaincontext.Accountsjoincincontext.Clientsona.UserIDequalsc.UserIDwherec.ClientID==yourDescriptionObject.ClientIDselecta.Balance).SingleOrDefault();或者-如果您只有DescriptionID:varbalance=(fromaincontext.Accountsjoincincontext.Clientsona.UserIDequalsc.UserIDjoindincontext.Descriptionsonc.ClientIDequalsd.ClientIDwhered.DescriptionID==yourDescriptionIDselecta.Balance).SingleOrDefault();(还是FirstOrDefault()orToList()orSum()?因为你的模型允许clients/Description关联多个account)以上就是C#学习教程的全部内容:实体框架中连接两个表,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: