EF: Le type de données texte ne peut pas être sélectionné en tant que DISTINCTE parce qu'elle n'est pas comparable
J'obtiens cette erreur parce que j'ai une table SQL Server avec une colonne de type "texte".
The text data type cannot be selected as DISTINCT because it is not comparable
Toute façon de résoudre ce problème sans changer le type de données?
Voici mon linq déclaration (c'est long):
var query = (from s in db.tblSuppliers
join p in
(
from p1 in db.tblSupplierPricingSchemes
select new
{
p1.SupplierID,
p1.PSLangPairID,
p1.CustomerID,
p1.PSLanguageStatus,
p1.PSPriceBasis,
p1.PSMinFlatCharge,
p1.PSTrxPrf,
p1.PSNoMatch,
p1.PSFuzzy,
p1.PS100Match_Rep,
p1.PSTrxOnly,
p1.PSPrfOnly,
p1.PSLinquisticHourlyRate,
p1.PSDTPType,
p1.PSDTPRate,
p1.PS_FZ50,
p1.PS_FZ75,
p1.PS_FZ85,
p1.PS_FZ95,
p1.PS_FZ100,
p1.PS_FZREPS,
p1.PSPerfectMatch
}
) on s.SupplierID equals p.SupplierID
join p2 in
(
from p in db.tblSupplierPricingSchemes
where custID.Contains(p.CustomerID) && p.PSLangPairID == languagePairID
group p by new { p.SupplierID, p.PSLangPairID, p.PSPriceBasis } into g
let CustomerID = g.Max(uh => uh.CustomerID)
select new
{
g.Key.SupplierID,
g.Key.PSLangPairID,
g.Key.PSPriceBasis,
CustomerID
}
) on p.SupplierID equals p2.SupplierID
join b in db.tblPricingBasis on p.PSPriceBasis equals b.PricingBasisID
join ss in db.tblSupplierStatus on p.PSLanguageStatus equals ss.SupplierStatusID into g1
from ss in g1.DefaultIfEmpty()
join l in db.tblLangPairs on p.PSLangPairID equals l.ProductID
where l.ProductID == languagePairID
&& p.PSLangPairID == p2.PSLangPairID
&& p.CustomerID == p2.CustomerID
&& p.PSPriceBasis == p2.PSPriceBasis
select new PreferredSupplier
{
SupplierID = s.SupplierID,
//SupplierName = s.CompanyName != null ? s.CompanyName + "-" + s.SupplierFirstName + " " + s.SupplierLastName
// : s.SupplierFirstName + " " + s.SupplierLastName,
SupplierName = s.CompanyName != null
? s.SupplierFirstName != null || s.SupplierLastName != null
? s.CompanyName + "-" + s.SupplierFirstName + " " + s.SupplierLastName
: s.CompanyName
: s.SupplierFirstName + " " + s.SupplierLastName,
CompanyName = s.CompanyName,
SupplierFirstName = s.SupplierFirstName,
SupplierLastName = s.SupplierLastName,
SupplierStatus = p.CustomerID == customerID ? "Team Member" : ss.SupplierStatus,
Email = (string)s.SupplierEmails,
Rate = (s.VolumeDiscountType == 1 ? // Percentage
//if the volume discount is as percentage then get the rate and multiple it by 1 - the discount percentage
((words > s.VolumeDiscountAmount && (task == "TM No Match" || task == "Translation/Proofreading")) ? 1 - s.VolumeDiscountValue : 1) *
(
rateField == "PSTrxPrf" ? p.PSTrxPrf :
rateField == "PSNoMatch" ? p.PSNoMatch :
rateField == "PSFuzzy" ? p.PSFuzzy :
rateField == "PS100Match_Rep" ? p.PS100Match_Rep :
rateField == "PSLinquisticHourlyRate" ? p.PSLinquisticHourlyRate :
rateField == "PSDTPRate" ? p.PSDTPRate :
rateField == "PS_FZ50" ? p.PS_FZ50 :
rateField == "PS_FZ75" ? p.PS_FZ75 :
rateField == "PS_FZ85" ? p.PS_FZ85 :
rateField == "PS_FZ95" ? p.PS_FZ95 :
rateField == "PS_FZ100" ? p.PS_FZ100 :
rateField == "PS_FZREPS" ? p.PS_FZREPS :
rateField == "PSPerfectMatch" ? p.PSPerfectMatch : null
) :
// Discount in Amount
// Take the Rate and substract the amount to discount
(
rateField == "PSTrxPrf" ? p.PSTrxPrf :
rateField == "PSNoMatch" ? p.PSNoMatch :
rateField == "PSFuzzy" ? p.PSFuzzy :
rateField == "PS100Match_Rep" ? p.PS100Match_Rep :
rateField == "PSLinquisticHourlyRate" ? p.PSLinquisticHourlyRate :
rateField == "PSDTPRate" ? p.PSDTPRate :
rateField == "PS_FZ50" ? p.PS_FZ50 :
rateField == "PS_FZ75" ? p.PS_FZ75 :
rateField == "PS_FZ85" ? p.PS_FZ85 :
rateField == "PS_FZ95" ? p.PS_FZ95 :
rateField == "PS_FZ100" ? p.PS_FZ100 :
rateField == "PS_FZREPS" ? p.PS_FZREPS :
rateField == "PSPerfectMatch" ? p.PSPerfectMatch : null
) - (s.VolumeDiscountValue == null ? 0 : s.VolumeDiscountValue)),
//PSMinFlatCharge = p.PSMinFlatCharge,
MinimumFee = p.PSMinFlatCharge,
//Basis = b.PricingBasisDesc,
Basis = task == "DTP" || task == "DTP Edit" ? p.PSDTPType : b.PricingBasisDesc,
StatusOrder = p.CustomerID == customerID ? 0 : p.PSLanguageStatus == null ? 1000 : p.PSLanguageStatus
}).Distinct();
OriginalL'auteur SteveB | 2011-11-08
Vous devez vous connecter pour publier un commentaire.
Réponse est Simple: "ne pas utiliser le texte".
Elle est déconseillée pour varchar(max) ans, lorsque les marché de SQL Server 2005.
Le code que vous avez est l'émission SELECT DISTINCT.
Vous avez besoin de fixer le modèle de tableaux, de sorte qu'il n'est pas
text
type de donnéesJ'espérais qu'il y avait un moyen de le faire sans modifier le schéma, comme quelque chose de casting dans le Linq déclaration.
vous devrez le faire par la suite. En le fixant droit dans LINQ n'est pas de la bonne façon.
j'ai juste modifié mon article à partir de ntext de type nvarchar(max) , maintenant je peux aller chercher les détails à l'aide de linq
Cette même erreur se produit également pour les types CLR comme la géographie, la géométrie et la hierarchyid qui ne sont PAS obsolètes et la solution du problème n'est pas de travailler autour de la coulée tout à varchar(MAX)/type nvarchar(MAX).
OriginalL'auteur gbn
Cast tout types de données texte à
varchar(max)
.Si vous pouvez vous le point de la colonne à partir de votre code, je vais vous montrer ce que le
select
.Merci, cela a bien fonctionné depuis notre base de données a été de vouloir nous abandonner et de re-charger la table d'origine!
OriginalL'auteur Jimbo
Jeté votre TEXTE les types de données VARCHAR(MAX), comme ça ...
Ou de l'utilisation de type VARCHAR(8000), comme c'est effectivement la même.
OriginalL'auteur Fandango68