1
var trnlist = from tr in db.DebtorTransactions
                              join wr in db.Warranties
                      on  tr.ProductID equals Convert.ToInt32(wr.PkfWarranty) into wrtd 
                              from wr1 in db.Warranties
                              join sr in db.SalesReps
                              on wr1.fldSrId equals sr.pkfSrID into wrsr
                              from wr2 in db.Warranties
                              join ag in db.Agentsenter code here
                              on wr2.fldAgentID equals ag.pkfAgentID into wrag
                              select wrtd;

tr.ProductID是一个 int 并且wr.PKfWarranty是字符串。var rustul= convert.toint32(tr.ProductID)不适合我。

Linq to entity 是否有任何内置功能可以做到这一点?

4

1 回答 1

3

在这里你说:

tr.ProductID 是一个整数

然后你尝试:

convert.toint32(tr.ProductID)

所以...您正在尝试将 a 转换intint? 在评论中你说:

int.parse(string) 的最佳重载方法匹配有一些无效参数

好吧,如果你试图调用int.Parse()并传递它,int那么你可能会得到那个确切的错误。我想没有int.Parse()接受 a的重载,int因为值已经是int.

让我们回顾一下您的问题描述:

tr.ProductID 是一个 int 并且 wr.PKfWarranty 是 String

你想比较这两个值吗?然后你要么需要转换tr.ProductIDstring

tr.ProductID.ToString()

转换wr.PKfWarrantyint

int.Parse(wr.PKfWarranty)

需要注意的几点:

  • 从 a 转换int为 astring非常安全,我怀疑你会遇到问题。但是,从 a 转换string为 anint 假设字符串可以转换为int. 如果字符串中有任何不是 的内容int,或者数字太大而无法适应int数据类型,则不会出现这种情况。 int.TryParse()为此目的而存在,但在内联 LINQ 语句中使用可能会很棘手,尤其是当该语句是需要生成 SQL 代码的表达式树时。
  • 如果将 转换int为 a string,则有不同的方法来比较字符串。根据产生的 SQL 代码或 C# 代码中是否发生这种情况会有所不同。如果是后者,string.Equals()是首选方法。
于 2013-10-09T15:36:18.433 回答