c# – 当param不为null Npgsql时,在linq查询中包含where子句
发布时间:2020-12-15 20:57:58 所属栏目:百科 来源:网络整理
导读:我有以下方法在数据库中注册联系人,但在注册之前我检查联系人是否存在: bool RegisterContact(Contact contactInfo) { bool entityExists = _dbContext.Contacts.FirstOrDefault( p = (p.FilesID.Equals(contactInfo.FilesID)) (p.EmailAddress == (string.
我有以下方法在数据库中注册联系人,但在注册之前我检查联系人是否存在:
bool RegisterContact(Contact contactInfo) { bool entityExists = _dbContext.Contacts.FirstOrDefault( p => (p.FilesID.Equals(contactInfo.FilesID)) && (p.EmailAddress == (string.IsNullOrEmpty( contactInfo.EmailAddress) ? p.EmailAddress : contactInfo.EmailAddress)) && (p.DisplayName == (string.IsNullOrEmpty( contactInfo.DisplayName) ? p.DisplayName : contactInfo.DisplayName))); } 此查询包括搜索条件中包含值(非空)的字段(FilesID,EmailAddress,DisplayName) 这种技术在MSSQL中运行良好,今天我将数据库管理器改为PostgreSQL并使用Npgsql. 所有的东西都工作,除了上面的linq查询,它引发了一个异常消息:“无法确定参数$2的数据类型” 我被迫以这种方式解决它: bool RegisterContact(Contact contactInfo) { Contact entityExists = null; if (string.IsNullOrEmpty(contactInfo.EmailAddress) && (string.IsNullOrEmpty(contactInfo.DisplayName))) entityExists = _dbContext.Contacts.FirstOrDefault( p => p.FilesID.Equals(contactInfo.FilesID)); if (!string.IsNullOrEmpty(contactInfo.EmailAddress) && string.IsNullOrEmpty(contactInfo.DisplayName)) entityExists = _dbContext.Contacts.FirstOrDefault( p => p.FilesID.Equals(contactInfo.FilesID) && p.EmailAddress == contactInfo.EmailAddress); if (string.IsNullOrEmpty(contactInfo.EmailAddress) && !string.IsNullOrEmpty(contactInfo.DisplayName)) entityExists = _dbContext.Contacts.FirstOrDefault( p => p.FilesID.Equals(contactInfo.FilesID) && p.DisplayName == contactInfo.DisplayName); if (!string.IsNullOrEmpty(contactInfo.EmailAddress) && !string.IsNullOrEmpty(contactInfo.DisplayName)) entityExists = _dbContext.Contacts.FirstOrDefault( p => p.FilesID.Equals(contactInfo.FilesID) && p.EmailAddress == contactInfo.EmailAddress && p.DisplayName == contactInfo.DisplayName); } 这是Npgsql错误还是设计错误?该问题的任何已知解决方案/解决方法? 解决方法
我目前有同样的情况.我认为问题是NpgSQL缺乏对string.IsNullOrEmpty的认可.
我用空字符串检查替换了测试,始终将输入参数识别为非NULL. – 不好 var data = from art in _ctx.Set<Soleo.Model.DLAR>() from iva in _ctx.Set<Soleo.Model.DLAI>().Where(k => k.DITTA == art.DITTA && k.COD == art.CIVA).DefaultIfEmpty() from fam in _ctx.Set<Soleo.Model.DLFA>().Where(k => k.DITTA == art.DITTA && k.COD == art.FAM).DefaultIfEmpty() from mar in _ctx.Set<Soleo.Model.DLMA>().Where(k => k.DITTA == art.DITTA && k.COD == art.MAR).DefaultIfEmpty() from udm in _ctx.Set<Soleo.Model.DLUM>().Where(k => k.DITTA == art.DITTA && k.COD == art.UM).DefaultIfEmpty() where art.DITTA == DLAUTH.Config.Current.DITTA && art.COD.Contains(sel_cod) && art.DES.Contains(sel_des) && (string.IsNullOrEmpty(sel_fam) || string.Compare(art.FAM,sel_fam,true) == 0) && (string.IsNullOrEmpty(sel_mar) || string.Compare(art.MAR,sel_mar,true) == 0) && (art.DIS >= sel_dis_da && art.DIS <= sel_dis_a) select new { COD = art.COD,DES = art.DES,DES_UDM = udm.DES,DES_MAR = mar.DES,DES_FAM = fam.DES,DES_CIVA = iva.DES,MAG1 = art.MAG1,MAG2 = art.MAG2,DES_DIS = art.DIS == 1 ? "Si" : "No" }; – 好: var data = from art in _ctx.Set<Soleo.Model.DLAR>() from iva in _ctx.Set<Soleo.Model.DLAI>().Where(k => k.DITTA == art.DITTA && k.COD == art.CIVA).DefaultIfEmpty() from fam in _ctx.Set<Soleo.Model.DLFA>().Where(k => k.DITTA == art.DITTA && k.COD == art.FAM).DefaultIfEmpty() from mar in _ctx.Set<Soleo.Model.DLMA>().Where(k => k.DITTA == art.DITTA && k.COD == art.MAR).DefaultIfEmpty() from udm in _ctx.Set<Soleo.Model.DLUM>().Where(k => k.DITTA == art.DITTA && k.COD == art.UM).DefaultIfEmpty() where art.DITTA == DLAUTH.Config.Current.DITTA && art.COD.Contains(sel_cod) && art.DES.Contains(sel_des) && (string.Compare(sel_fam,"",true) == 0 || string.Compare(art.FAM,true) == 0) && (string.Compare(sel_mar,true) == 0 || string.Compare(art.MAR,DES_DIS = art.DIS == 1 ? "Si" : "No" }; 但我不认为这是解决方案.我将向NpgSQL报告此案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- oracle恢复删除的数据
- reactjs – 如何将.less纳入React项目?
- 五 tf / Tutorials / tf and Time (C++)
- 不规矩的xml与JAVA对象互相转换的小技巧-使用Marshaller
- c# – 在GridView的RowBound事件上将SqlDataReader DataIte
- [Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Pow
- ‘=>’的Ruby语法(hashrocket)
- Oracle SQL语言DDL和对象管理_超越OCP精通Oracle视频教程培
- c# – 在Debug构建期间禁用SonarLint分析
- c# – 在多个窗口中使用WPF WebBrowser控件时出现内存泄漏