1

我正在研究 API 如下所示的存储库模式:

var visitor = repository.Find(x => x.EmailAddress == credentials.EmailAddress &&
                              x.Password == credentials.Password);

其中visitor是一个域对象,x代表这个域对象。存储库上 Find 方法的方法签名是:

T Find(Func<T, bool> query);

这一切都很棒,直到我尝试将它与 Linq2Sql 一起使用,因为 linq2sql 创建了自己的对象,因此当我想调用时:

context.visitors.FirstOrDefault(query); 

存在类型不匹配,因为 linq2sql 需要它创建的类型的函数,而不是我传入的函数。

4

1 回答 1

1

首先,您需要将Find签名更改为:

T Find(Expression<Func<T, bool>> query);

LINQ to SQL 需要将逻辑作为表达式树而不是普通委托,否则它无法弄清楚如何将其转换为 SQL。

除此之外,恐怕还不是很清楚-听起来您没有为存储库和 LINQ to SQL 使用相同的域类。是对的吗?这听起来像是一个潜在的问题。至少它会让生活变得相当棘手。

于 2009-08-22T18:03:05.940 回答