IEnumerable和IQueryable联盟

时间:2014-01-08 13:59:23

标签: c# entity-framework

// get cats out of local db
var localDb = db.Categories.Select(c => c.Name);
// get cats out of wcf
var wcf = service.Categories().Select(c => c.CatName);

// create union set
var all = new HashSet<String>(localDb);
all.UnionWith(wcf);

上面的代码工作正常,但下面的代码会引发运行时错误。

var localDb = db.Products.Where(c => c.Category.Equals(name))
                         .Select(p => p.Name);

var wcf = service.Products().Where(c => c.CategoryId == 
                             service.CategoryByName(name).CategoryId)
                            .Select(p => p.ProName);

var all = new HashSet<String>(localDb);
all.UnionWith(wcf);

异常:

An exception of type 'System.ArgumentException' occurred in 
System.Data.Entity.dll but was not handled in user code
Additional information: DbComparisonExpression requires arguments with 
comparable types.

任何人都可以解释为什么第一个有效,第二个没有?

1 个答案:

答案 0 :(得分:4)

这一行:

var localDb = db.Products.Where(c => c.Category.Equals(name))
                .Select(p => p.Name);

尝试比较名称(我希望是字符串)和类别对象(我希望不是)

你无法比较这两者,所以你得到一个错误。

从你之前的例子我怀疑你想写

var localDb = db.Products.Where(c => c.Category.Name.Equals(name))
                .Select(p => p.Name);