1: using System;
2: using System.Linq;
3:
4: namespace Sims3Residents.View
5: {
6: public static class FamilyFluentFilter
7: {
8: public static IQueryable<Family> ById(this IQueryable<Family> query, Guid? id)
9: {
10: if(id == null || id.Equals(Guid.Empty))
11: // Die ID ist nicht unbedingt bekannt.
12: return query;
13: var result = query.Where(family => family.ID.Equals(id));
14: return result;
15: }
16:
17: public static IQueryable<Family> ByName(this IQueryable<Family> query, string name)
18: {
19: if(String.IsNullOrEmpty(name))
20: throw new ArgumentNullException("name", "Es muß ein Familienname angegeben werden.");
21: /* Die Testbarkeit wird verbessert wenn man die query nicht unmittelbar zurück gibt,
22: * sondern sie vorher in einer Variablen ablegt. */
23: var result = query.Where(family => family.Name.Contains(name));
24: return result;
25: }
26:
27: public static IQueryable<Family> ByDetails(this IQueryable<Family> query, string details)
28: {
29: if(String.IsNullOrEmpty(details))
30: // Nicht jede Familie hat Detailinformationen.
31: return query;
32: var result = query.Where(family => family.Details.Contains(details));
33: return result;
34: }
35:
36: public static IQueryable<Family> ByLastModified(this IQueryable<Family> query, DateTime? lastModified)
37: {
38: if(lastModified == null)
39: // Es kann passieren daß man eine Familie sucht, dessen Modifizierungsdatum man nicht kennt.
40: return query;
41: var result = (query.Where(family => family.LastModified == lastModified));
42: return result;
43: }
44:
45: public static IQueryable<Family> ByMembers(this IQueryable<Family> query, byte? members)
46: {
47: if(members == null || members < 1)
48: // Es kann passieren daß man eine Familie sucht, deren Mitgliederzahl man nicht kennt.
49: return query;
50: var result = (query.Where(family => family.Members == members));
51: return result;
52: }
53:
54: public static IQueryable<Family> ByRemarks(this IQueryable<Family> query, string remarks)
55: {
56: if(string.IsNullOrEmpty(remarks))
57: return query;
58: var result = (query.Where(family => family.Remarks == remarks));
59: return result;
60: }
61:
62: public static IQueryable<Family> ByTown(this IQueryable<Family> query, Town town)
63: {
64: if(town == null || String.IsNullOrEmpty(town.Name))
65: // Es kann passieren daß man eine Familie sucht, deren Wohnort man nicht kennt.
66: return query;
67: var result = query.Where(family => family.Town.Name.Contains(town.Name));
68: return result;
69: }
70: }
71: }