2

私は Entity Framework を初めて使用し、基本的な問題であることを願って苦労しています。私のコードはここにあります:

    Dim accounts As List(Of STUDENT) =
        (From a In SA.STUDENTs
         Where (a.MATRIC_NO.Contains(matric) And a.FIRST_NAME.Contains(firstName) And a.MIDDLE_NAMES.Contains(middleName) And a.SURNAME.Contains(lastName) And a.PREFERRED_NAME.Contains(preferredName))
         Select a).ToList

検索フィールドの 1 つがデータベースで NULL になるまで、クエリは正常に実行されます。たとえば、マトリックス番号が検索インターフェイスに入力され、ミドル ネームが空白のままである場合、データベースでミドル ネームが NULL の場合、クエリはレコードを返しません。ミドル ネームがデータベース内の空白の場合、レコードが返されます。

誰でもポインタを提供できますか?

どうもありがとう!

4

4 に答える 4

0

クエリにチェックを追加できます。例えば:

public function filterList(IEnumerable list, string name)
{
    var filtered_list = list.Where(x=> x.Name.Contains(name) || string.IsNullorWhitespace(name)).ToList();

    return filtered_list;
}

したがって、name変数が空の場合、すべての要素がtrueを返すため、すべての要素が返されます(実際のフィルターは適用されません)。

つまり、基本的に、すべてのフィルターを

something.Contains(anotherthing)

something.Contains(anotherthing) || string.IsnullOrWhitespace(anotherthing)
于 2012-11-22T12:12:35.867 に答える
0
(From a In SA.STUDENTs
         Where isnull(a.MATRIC_NO.Contains(matric) And a.FIRST_NAME.Contains(firstName) And a.MIDDLE_NAMES.Contains(middleName) And a.SURNAME.Contains(lastName) And a.PREFERRED_NAME.Contains(preferredName))
         Select a).ToList

このように`:select * from tbl where statusid = isnull(@ statusid、statusid)

于 2012-11-22T12:13:32.353 に答える
0

このようにしてみてください..

   Dim get_rmf_2 = From rmf In t_rmf _
          Where Not IsDBNull(rmf!NIVP) AndAlso rmf!NIVP = nivp_rap

これはVBです。これはうまく機能すると思います

于 2012-11-22T12:53:36.133 に答える
0

私は別のアプローチを使用してこれを解決することができました。特定のフィールドに値が入力されていない場合は、クエリから除外します。以下のように、述語を使用してこれを実現しました。

    'create the base query
    Dim accounts =
        (From a In SA.STUDENTs
         Select a)


    'create predicates for each condition required in the query
    If matric <> "" Then
        accounts = accounts.Where(Function(m) m.MATRIC_NO.Contains(matric))
    End If

    If firstName <> "" Then
        accounts = accounts.Where(Function(f) f.FIRST_NAME.Contains(firstName))
    End If

    If middleName <> "" Then
        accounts = accounts.Where(Function(mn) mn.MIDDLE_NAMES.Contains(middleName))
    End If

    If lastName <> "" Then
        accounts = accounts.Where(Function(l) l.SURNAME.Contains(lastName))
    End If

    If preferredName <> "" Then
        accounts = accounts.Where(Function(p) p.PREFERRED_NAME.Contains(preferredName))
    End If

    'execute the query
    Dim accountlist = accounts.ToList

    'return the results
    Return accountlist

誰かがこれに何か問題があるか、または私が気付いていない問題がある場合は、お知らせください。私は LINQ to Entities と LINQ 全般に非常に慣れていません。

于 2012-11-22T14:34:13.917 に答える