Боюсь, что SubSonic не поддерживает этот вид перекрестных ссылок (по крайней мере, это было не в прошлый раз, когда я пытался).
Вы можете обойти это, используя SubSonic только для извлечения необходимых данных из базы данных, но затем выполните соединение в обычном C # Linq-to-Objects:
public IQueryable GetData(string DataType)
{
// Get a list of the types we need
var requiredTypes = WebHelpers.LocalList.Select(l => l.Type)
.Distinct().ToArray();
// Retrieve all the relevant rows from the database
var dbData = db.All<DatabaseObject>()
.Where(d => requiredTypes.Contains(d.Type))
.ToArray();
// Do the join locally
return (
from t in dbData
join e in WebHelpers.LocalList
on t.Type equals e.Type
orderby t.DateOccurred descending
select t
).Where(e => e.Category == TransType);
}
(Кстати, вы, вероятно, сможете добиться большей производительности, если переместите .Where()
выше orderby
, потому что тогда будет меньше сортировки. Возможно, вы даже сможете включить ее в запрос к базе данных (тот, который извлекает dbData
). Я не могу точно сказать, потому что ваш код сбивает с толку, потому что он ссылается на TransType
, который вы нигде не объявили, а метод имеет параметр DataType
, который нигде не используется, и вы используете t
и e
противоречиво.)